2011年10月23日日曜日

Struts 表データにおける各レコード別にActionを呼び出したい場合

設計の都合上、 <logic:iterate>で表データにおける各レコード別にActionを呼び出したい場合がある。
継承するstrutsのActionクラスにも拠るが、「EventDispatchAction」の場合は、jsp内で指定したactionと、EventDispatchActionを継承したActionクラスのメソッドと完全一致しないと想定した挙動を示してくれない。
その場合は幾つか方法があり、
  • button利用時
    jsp内の<html:form>に<html:hidden>オブジェクトを配置し、javascriptでhiddenオブジェクト内のvalueを操作後にactionで該当のhiddenオブジェクト内のvalueを取得する。

  • link利用時
    <html:link>は個別にactionを指定することができる。
    この為、次のように指定することでパラメータを引き渡すことができる。

    <html:link action="/action?key=${key}"/>

  • submit利用時
    submitは次のようにjspに記載する

        <logic:iterate id="data" name="LoginActionForm" property="dataList" indexId="i">
        <tr style="border-collapse: separate;color:red">
            <html:form action="/login"><td>
                <html:hidden property="prm" value="${data}"/><html:submit value="DISPLAY" property="display"/>
            </td></html:form>
        </tr>
        </logic:iterate>

このとき、link利用時以外はActionFormBeanにActionに引き渡したい値を取得するためのアクセッサは用意しておく必要がある。


設計上の都合(このような方法をとらなくてはいけないのは明らかに"まずい"設計だと思いますが)で他に良い方法がない場合は上記の方式でやっても良いかも。

0 件のコメント:

コメントを投稿