1

Struts2 でユーザー定義オブジェクト属性のリストを設定する際に問題が発生しています。

これが私の例です(ゲッター/セッターは省略されています):

public class Foo { プライベート文字列 attr1; プライベート文字列 attr2; }

public class Bar { private List foos; }

public class StrutsAction extends ActionSupport { private Bar bar; }

次のようにJSPにコードがあります(抜粋):

<tr><td><input type="text" name="bar.foos.attr1"/></td><td><input type="text" name="bar.foos.attr2"</td></tr>
<tr><td><input type="text" name="bar.foos.attr1"/></td><td><input type="text" name="bar.foos.attr2"</td></tr>

リスト内に各属性を持つ 1 つの foo アイテムを作成するには、各テーブル行が必要ですが、コードが渡されると、属性ごとに新しい foo オブジェクトが作成され、最終的に 2 つではなく 4 つの foo になります。

次のように、インデックスを html にハードコーディングすることで問題を解決できることを理解しています。

<tr><td><input type="text" name="bar.foos[0].attr1"/></td><td><input type="text" name="bar.foos[0].attr2"</td></tr>
<tr><td><input type="text" name="bar.foos[1].attr1"/></td><td><input type="text" name="bar.foos[1].attr2"</td></tr>

インデックスをハードコーディングせずに実行できるかどうか疑問に思っていましたか?

4

2 に答える 2

0

行数が可変であると言いました。名前を付けましょうnumOfRows...次のように例を書き直してみてください:

<table>
<s:iterator status="stat" value="(numOfRows).{ #this }" >
    <tr>
        <td><input type="text" name="bar.foos[%{#stat.index}].attr1"/></td>
        <td><input type="text" name="bar.foos[%{#stat.index}].attr2"/></td>
    </tr>
</s:iterator>
</table>

そこでIterator タグに関するドキュメントを見つけることができます... ページの下部を見てください。


レンダリング段階で持っていない場合numOfRows、テキストフィールドを生成する唯一の方法はクライアント側の JavaScript です....

[編集]

インデックスについて...次のようなインデックスがあれば気にする必要はありません:

<table>
    <tr>
        <td><input type="text" name="bar.foos[0].attr1"/></td>
        <td><input type="text" name="bar.foos[0].attr2"/></td>
    </tr>
    <tr>
        <td><input type="text" name="bar.foos[3].attr1"/></td>
        <td><input type="text" name="bar.foos[3].attr2"/></td>
    </tr>
    <tr>
        <td><input type="text" name="bar.foos[5].attr1"/></td>
        <td><input type="text" name="bar.foos[5].attr2"/></td>
    </tr>
</table>

Struts は適切に変換を行います...インデックスが欠落しているオブジェクトは null になることに注意する必要があります...したがって、アクションでそれらを除外する必要があります。

于 2012-03-26T13:48:57.400 に答える
0

Struts 2 イテレータ タグを使用できると思います。

<s:iterator var="foo" value="bar.foos">
   <tr><td><s:property value="attr1"/> .....
</s:iterator>

うまくいかない場合は、別の解決策を考えることができます。

詳細については、 http : //struts.apache.org/2.3.1/docs/iterator.html を参照してください。

[] 秒

于 2012-03-26T13:35:25.943 に答える