ボタンにパラメータを渡す
検索結果の一覧画面から詳細画面へ遷移させるとき、(一覧の)各行に[詳細]ボタンで行いたい。だから必然的にボタン毎にパラメータをセットする必要がある。そこでこんなコードを書いてみた。
<span m:inject="s:forEach" m:items="#{petshopList}" m:var="e" m:varIndex="i"> <tr> : <td> <input type="button" value="詳細" m:action="details"> <span m:inject="f:param" m:name="id" m:value="#{e.id}"/> </td> </tr> : </span>
結果はNG。次の詳細画面ではidがnullになっている。これをアンカータグを使うようにするとOK。思ったように動く。
<span m:inject="s:forEach" m:items="#{petshopList}" m:var="e" m:varIndex="i"> <tr> : <td> <a m:action="details">詳細 <span m:inject="f:param" m:name="id" m:value="#{e.id}"/> </a> </td> </tr> : </span>
生成されたソースを見るとonclickが全然違う。考えてみれば今までだってボタン押下でパラメータを渡すにはhiddenとか使ってたよな。そう考えればS2JSF(というかJSF)でできなくても不思議はないか。
2005/6/6追記
higayasuoさんから「petshopListがセッションに保存されていれば大丈夫ですよ。」というコメントをもらいました。そこでpetshopListを作っているActionクラスに以下の宣言を追加してみたところ、ボタンでもパラメータが渡せるようになりました。ありがとうございました。
public static final String petshopList_EXPORT = "session";