サブアプリケーションスコープについて その1
以下のようなhogeページからfugaページへ遷移するアプリケーション(同一サブアプリケーション)があったとします(ラジオボタンのラベル引継ぎ機能を使ってみたかったので1.0.10で試しました)。
HogePage.java(アクセッサは省略)
public class HogePage { private String aaa; private List bbbItems; @Required private String bbb; private String bbbLabel; public Class doHoge() { return FugaPage.class; } public void initialize() { bbbItems = new ArrayList(); Map items1 = new HashMap(); items1.put("value", "001"); items1.put("label", "ABC"); bbbItems.add(items1); Map items2 = new HashMap(); items2.put("value", "002"); items2.put("label", "abc"); bbbItems.add(items2); this.aaa = "AAA"; } }
hoge.html
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:te="http://www.seasar.org/teeda/extension" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form id="form"> <span id="allMessages" /> <span id="aaa" /> <span id="bbb"> <input type="radio" name="bbb" value="0" checked="checked" /> ゼロ <input type="radio" name="bbb" value="1" /> イチ </span> <input id="doHoge" type="submit" value="次ページへ" /> </form> </body> </html>
FugaPage.java(アクセッサは省略)
public class FugaPage { private String aaa; private String bbbLabel; }
fuga.html
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:te="http://www.seasar.org/teeda/extension" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form id="form"> <span id="allMessages" /> <span id="aaa" /> <span id="bbbLabel" /> </form> </body> </html>
これを実行すると
となります。前者の問題を回避するために普通(?)は
<input type="hidden" id="bbbItemsSave"/>
というのを追加します。これで後者の問題も半分解決し、bbbLabelが表示されるようになります。同様にaaaも表示するようにするには普通(?)はhidden項目を追加します。
<input type="hidden" id="aaa-hidden"/>
が、実はhidden項目を追加しなくても
@SubapplicationScope private String aaa;
とやれば引き継がれるようになります。ここまでは公式(?)な方法ですが
@SubapplicationScope private List bbbItems;
はどうなんでしょう?bbbItemsを次ページに引き継ぐ必要はないといえばないんですが、動き的には問題なさそうな感じがしてます。個人的にはHTMLにhidden項目追加するよりこっちの方が好きなんでできればこっち使いたいなぁなんて・・・。