S2JSFにおけるf:param関連


S2JSFにおいて、f:paramを扱う際の注意点です。

コンポーネントのスコープ

f:paramに限った事では無いのですが
f:param の m:value で指定するコンポーネントがRequestスコープの場合
画面がレンダリングされた際のコンポーネントと、次にボタンやリンクを押下した際の
リクエスト時に新たに生成されるコンポーネントインスタンスが異なる為
意図しない値となります。


回避策としては、

が考えられます。

リダイレクトでのparamの引き継ぎ

JSF(S2JSFも)は基本的にforwardベースのアーキテクチャです。
ですので、redirectでf:paramの値を引き継ぐ事は現状出来ません。

これはJIRAの方にも登録されています。
https://www.seasar.org/issues/browse/JSF-27

余力があれば対応したいと思います(期待薄です...)


[補足]
redirectの場合(かなり簡略的ですが)

Client => Server(redirect命令) => Client => Server

という流れになります。
redirectで、f:paramを引き継げないのは
redirectの場合、リクエスト情報は引き継がれずに
2つの異なるリクエストが発生する為です。