■概要
f:param利用時に、リクエストパラメータよりも
sessionの値(VB式で解決できる値)が優先して適用される。
■再現画面の作り方 (s2jsf-exampleの例)
1. EmployeeListInitAction#initializeにて、
emloyeeListをsessionにexportする。
2. EmployeeListAction#goNextで、
deleteを押した際に、employeeLogic#deleteを呼び出す。
■再現方法
1. employeeList画面で、3行目あたりのdeleteリンクを押して、行を削除する。
2. 画面が再描画され、行が消えることが確認できる
3. F5でブラウザのリロード
4. 画面が再描画され、次の行が消えてしまったことが確認できる
何が起きてるかっていうと、、、
1と3では、同じリクエストが飛んでいるはずなのに、
f:paramで渡された値が、1と3の時で異なっています。
■原因
<span m:inject="f:param" m:name="empno" m:value="#
{e.empno}"/>
この e.empno を解釈する際に、
ダブルサブミット時(3.の時)には、実際に送られてきた値ではなく、
sessionにいたemployeeListの該当行数(3行目)のemployeeのempnoが設定されます。