4

現在、次のコードがあり、データは正常に表示されます。

<logic:iterate name="myList" id="product"  indexId="iteration" type="com.mycompany.MyBean">  
    <tr>  
        <td> <bean:write name="product" property="weight"/> </td>  
        <td> <bean:write name="product" property="sku"/> </td>  
        <td> <bean:write name="product" property="quantity"/> </td>  
    </tr>  
</logic:iterate>  

しかし今、私は「量」の部分を変更可能にする必要があります。ユーザーはそのフィールドを更新し、送信を押すことができるはずです。サーバーに送信されると、「myList」は新しい数量で自動的に更新されます。

私はこれについて助けを求めてみましたが、私が見つけ続けているのは、データを変更するのではなく、データのみを表示する方法の例です。どんな助けでもいただければ幸いです。

4

4 に答える 4

4

それが機能するためにやるべきことがたくさんあるので、これはトリッキーです。まず、属性INDEXED = TRUEと名前とは異なるIDを使用して、イテレータ内でhtmlタグを使用してタグを宣言します。また、「indexId」属性を取り出して、インデックスに単純な「index」という単語を使用します。

<logic:iterate name="myList" id="myListI"   type="com.mycompany.MyBean">  
<tr>  
    <td> <html:input name="myListI" property="weight"  indexed="true"/> </td>  
    <td> <html:input name="myListI" property="sku"  indexed="true"/> </td>  
    <td> <html:input name="myListI" property="quantity"  indexed="true"/> </td>  
</tr>  

その後、strutsがBeanの属性を取得および設定できるようにするには、反復タグのIDに記述した名前を使用して、コレクションオブジェクト内でEXTRAgetおよびsetメソッドを宣言する必要があります。この場合、「myListI」用に2つの追加のgetメソッドとsetメソッドを記述します。

public void setMyListI(int index, myBean value){
    this.myList.add(value);
}
public myBean getMyListI(int index){
    return this.myList.get(index);
}
于 2012-04-20T13:17:31.623 に答える
2

Th0rndikesの答えはほとんど正しいと思います。私の実装は少し違うので、これも試してみる価値があるかもしれません。

private List<Parameter> activeParameters;

public List<Parameter> getActiveParameters() {
    return activeParameters;
}

public Parameter getParam(int index){
    return this.activeParameters.get(index);
}

JSP

<logic:iterate name="MyForm" property="activeParameters" id="param">
  <tr>
    <td><bean:write name="param" property="prompt"/></td>
    <td><html:text name="param" property="value" indexed="true"/></td>
  </tr>
</logic:iterate>

要約すると、反復タグでTypeを使用せず、代わりにpropertyタグを使用しました。Beanでは、メソッドパラメータとしてインデックスを使用してJSP(param)の反復IDの名前と一致するゲッターを追加することでうまくいきました。

于 2012-10-07T15:35:01.680 に答える
2

これを見てください:http ://wiki.apache.org/struts/StrutsCatalogLazyList

インデックス付きプロパティ

Struts htmlタグには、フォームが送信されたときにBeanのコレクションに入力するための適切なhtmlを生成するインデックス付き属性があります。秘訣は、id属性にインデックス付きプロパティと同じ名前を付けること です。

たとえば、次のjsp ...

   <logic:iterate name="skillsForm" property="skills" id="skills">

       <html:text name="skills" property="skillId" indexed="true"/>

   </logic:iterate>

...次のhtmlを生成します

<input type="text" name="skills[0].skillId value="..."/>
<input type="text" name="skills[1].skillId value="..."/>
....
<input type="text" name="skills[n].skillId value="..."/>

フォームが送信されると、BeanUtilsは最初にgetSkills(index)メソッドを呼び出して、インデックス付けされたBeanを取得し、次に取得されたBeanでsetSkillId(..)を呼び出します。

于 2015-04-29T11:53:09.153 に答える
1

理論的にはindexed、strutshtmlタグの属性をこれに使用できます。

logic:iterateタグ内でのみ有効です。trueの場合、htmlタグの名前は「id[34].propertyName」としてレンダリングされます。括弧内の数字は、反復ごとに生成され、祖先のlogic:iterateタグから取得されます。

ただし、タグには対応するindexed属性がないため、html:errorsタグの有用性が制限されます。また、属性と属性の必要な組み合わせはid、かなり混乱する可能性があります。nameproperty

jspスクリプトレットを使用して、反復インデックスを含むプロパティ名を生成する方が簡単であることがわかりました。次のコードでは、フォームに文字列配列プロパティ「quantity」が必要です。

<% int idx=0; %>
<logic:iterate ...>
    <html:text property='<%= "quantity[" + idx + "]" %>'/>
    <html:errors property='<%= "quantity[" + idx + "]" %>'/>
    <% i++; %>
</logic:iterate>
于 2012-04-20T13:10:16.320 に答える