ActionにMapは自動バインドされない。
S2StrutsのMap-backed ActionForm絡みでもうひとつ。
クエリ文字列に xxx=yyy という記述を含めておいて、
Action側に setXxx(String str) メソッドを作っておけば
自動的に値がバインドされる。これは便利。
でも、クエリ文字列に xxx(yyy)=zzz という記述を含めて
Action側にsetterやgetterを作っても、値はバインドされない。残念。
これができたら、簡単にMapを画面間で持ちませそうなんですけどね。
(もちろん、いっそうのセキュリティチェックは必要ですが)
たとえば、検索条件をMapに入れておいて、
ページングのリンクにMapをクエリ文字列として入れておく、
みたいな用途に使えるかな、と思いました。
今のところ、
- [JSP] 検索条件入力画面で検索条件を入力させる
- [Action] 検索条件をMap-backed ActionFormを利用して、ActionFormに保持
- [InitAction] 検索実行
- [InitAction] 検索条件を、Mapにコピーして(キーを少し変えて)リクエストに保持
- [JSP] リンクのクエリ文字列にMapを展開
- [JSP] リンクはaction属性を指定して、Action呼び出しを行う
- [Action] 自前でリクエストから値を取り出してホゲホゲ
のように対応しています。
もしActionでMapが受けられるようになれば
- [JSP] 検索条件入力画面で検索条件を入力させる
- [InitAction] 検索条件をMapで受ける
- [InitAction] 検索実行
- [JSP] リンクのクエリ文字列にMapを展開
- [InitAction] 検索条件をMapで受ける
と、少し簡略化できるかな、と思います。
もちろん、
クエリ文字列で渡ってきた値は、
文字列としてリクエストオブジェクトに保持されてるだけで
Mapとして保持されているわけではないのですから、
現状の仕様(実装)でやむなし、とは思いますけどね。