画面のデータを受け取るデータBeanをJSPで指定する場合、uji.idリクエストパラメタを使う方法とuji.beanリクエストパラメタを使う方法があります。アプリケーションによって適当な方法で指定する必要があります。
<uji:useBean id="body" cls="sample.BodyBean" request="true" /> <FORM method="post"> <INPUT name="uji.id" type="hidden" value="body"> <INPUT name="uji.bean" type="hidden" value="sample.BodyBean"> .... </FORM>
uji.idは、DispatchContextクラスのsetResponseBeanメソッドで設定され、サーバーで保持しているデータBeanに対してデータを設定します。
以下の利点があります。
既存のデータBeanを使用するため、余分な処理が不要になり、アプリケーションの効率を上げることができます。
画面部品を利用する複雑な構造のデータBeanに対しても、データの設定ができます。
以下の注意事項があります。
タイムアウトやブラウザの戻るボタン使用時に、サーバーで保持されているデータBeanと画面との対応が取れなくなる場合があります。戻るボタンを使用すると、サーバーで保持されるデータBeanの型と画面のボタン名でコマンドマップを参照するため、意図したビジネスクラスが呼ばれない場合があります。
uji:useBeanタグで、request="false"と指定すると、サーバーで保持しているデータBeanを削除します。request="true"と指定する必要があります。
uji.beanは、HTTPリクエストに対して毎回データBeanを生成します。
以下の利点があります。
リクエストごとにデータBeanを生成するため、タイムアウトやブラウザの戻るボタンに対しても動作可能です。
以下の注意事項があります。
データBeanの内部に別のクラスがある場合、データBeanのコンストラクタで全て生成する必要があります。また、画面部品を利用する場合は繰り返し数を合わせてクラスを生成する必要があります。項目クラスのインターフェイス(ComboBoxModelやTableViewModelなど)を実装するクラスでは、その内部にあるクラスについてもコンストラクタで生成する必要があります。
画面部品のクラス(TableModelやListModelを実装するクラス)で、値としてString以外のクラスを持つものは使用できません。
uji.idとuji.beanを両方指定した場合、まずサーバーで保持しているデータBeanを探し、それがuji.beanで指定したクラスと一致していれば、そのデータBeanを使用します。サーバーで保持しているデータBeanがなければ、データBeanを生成します。
以下の利点があります。
サーバーで保持しているデータBeanが利用可能な場合には、uji.idの利点が有効になります。
タイムアウトやブラウザの戻るボタンに対しても動作可能です。
以下の注意事項があります。
リクエスト時にデータBeanが生成される場合、uji.beanの注意事項が当てはまります。