1つ前の画面を表示させる処理は1つ前の画面で使用したデータBeanを領域に割り当てることで実現できます。通常、領域にデータBeanを割り当てるにはcom.fujitsu.uji.DispatchContextクラスのsetResponseBeanメソッドを使用しますが、com.fujitsu.uji.http.HttpDispatchContextクラスのpopBeanBackupメソッドを使用すると以前に使用したデータBeanを簡単に再割り当てできます。
画面に「戻る」ボタンを作成し、そのボタンが押されると前の画面に戻るアプリケーションを例に説明します。このアプリケーションで、popBeanBackupメソッドを使用して以下の図のような画面遷移が実現できます。
画面Aの次に画面Bが表示され、画面Bに設置した「戻る」ボタンを押すと画面Aに戻るという遷移です。
画面Aを表示させるために、ビジネスクラスではMenuBeanクラスを領域に割り当てるとします(図の(X)のメソッド)。この処理は以下のような記述になります。
public void startup(DispatchContext context) { MenuBean menuBean = new MenuBean(); .... context.setResponseBean("body",menuBean); }
同様に、画面Bを表示させるために、ビジネスクラスでInputBeanを領域に割り当てるとします(図の(Y)のメソッド)。
public void input(DispatchContext context, MenuBean dataBean) { InputBean inputBean = new InputBean(); .... context.setResponseBean("body",inputBean); }
図の(Z)のメソッドで、以下のようにpopBeanBackup(1)を実行することにより、画面Aが再び表示されます。
public void back(DispatchContext context, InputBean dataBean) { ((HttpDispatchContext)context).popBeanBackup(1); }
Apcoordinatorは領域に割り当てられたデータBeanを保存するためのスタックを持っており、リクエストごとにデータBeanを保存しています。popBeanBackupメソッドはスタックに保存されたデータBeanを取り出して領域に再割り当てします。
popBeanBackupの引数には、スタックから捨てる画面の数を指定します。上記図の(Z)の時点では、スタックに保存されているデータBeanは以下の図のようになっています。
popBeanBackupの引数に1を指定すると、スタックの先頭にある画面B用のデータBeanが捨てられ、画面A用のデータBeanが領域に割り当てられます。その結果、画面Aが表示されます。仮にpopBeanBackupの引数に0を指定したとすると、スタックから何も捨てられないため、画面Bが表示されることになります。
スタックのサイズはデフォルトで5です。この値を変更する方法については“11.2 初期化パラメタ”を参照してください。保存されている画面の数がこの指定を超えると、古いものから順に消去されます。
注意
スタックにはデータBeanのコピーが保存されるのではなく、データBeanそのものが保存されます。したがって、データBeanの中のデータを書き換えた場合には、popBeanBackupメソッドを使って戻した画面には書き換えられたデータが表示されます。
関連項目