谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

ActionにMapは自動バインドされない。

S2StrutsのMap-backed ActionForm絡みでもうひとつ。


クエリ文字列に xxx=yyy という記述を含めておいて、
Action側に setXxx(String str) メソッドを作っておけば
自動的に値がバインドされる。これは便利。


でも、クエリ文字列に xxx(yyy)=zzz という記述を含めて
Action側にsetterやgetterを作っても、値はバインドされない。残念。


これができたら、簡単にMapを画面間で持ちませそうなんですけどね。
(もちろん、いっそうのセキュリティチェックは必要ですが)


たとえば、検索条件をMapに入れておいて、
ページングのリンクにMapをクエリ文字列として入れておく、
みたいな用途に使えるかな、と思いました。


今のところ、

  1. [JSP] 検索条件入力画面で検索条件を入力させる
  2. [Action] 検索条件をMap-backed ActionFormを利用して、ActionFormに保持
  3. [InitAction] 検索実行
  4. [InitAction] 検索条件を、Mapにコピーして(キーを少し変えて)リクエストに保持
  5. [JSP] リンクのクエリ文字列にMapを展開
  6. [JSP] リンクはaction属性を指定して、Action呼び出しを行う
  7. [Action] 自前でリクエストから値を取り出してホゲホゲ

のように対応しています。


もしActionでMapが受けられるようになれば

  1. [JSP] 検索条件入力画面で検索条件を入力させる
  2. [InitAction] 検索条件をMapで受ける
  3. [InitAction] 検索実行
  4. [JSP] リンクのクエリ文字列にMapを展開
  5. [InitAction] 検索条件をMapで受ける

と、少し簡略化できるかな、と思います。


もちろん、
クエリ文字列で渡ってきた値は、
文字列としてリクエストオブジェクトに保持されてるだけで
Mapとして保持されているわけではないのですから、
現状の仕様(実装)でやむなし、とは思いますけどね。