ボタンにパラメータを渡す

検索結果の一覧画面から詳細画面へ遷移させるとき、(一覧の)各行に[詳細]ボタンで行いたい。だから必然的にボタン毎にパラメータをセットする必要がある。そこでこんなコードを書いてみた。

<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";