Struts逻辑:迭代输入字段

时间:2012-04-20 12:56:02

标签: java input struts logic loops

我目前有以下代码,数据显示正常。

<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”应该自动更新为新数量。

我已经尝试过寻求帮助,但我一直在寻找的只是如何显示数据的示例,而不是修改它。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

所以这很棘手,因为有很多事情要做才能使它发挥作用。首先,使用html标签在迭代器内声明你的标签,属性为INDEXED = TRUE,ID与名称不同,我还取出了“indexId”属性,使用简单的“索引”字作为索引:

<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的属性,您需要使用在iterate标记的id中编写的名称在集合对象中声明EXTRA get和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);
}

答案 1 :(得分: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>

总之,我没有在iterate标签中使用Type,而是使用了属性标签。在bean中添加一个与JSP(param)中的迭代ID名称匹配的getter,并使用索引作为方法参数。这就是诀窍。

答案 2 :(得分:1)

理论上,indexed attribute of the struts html tags可用于此:

  

仅在logic:iterate标记内有效。如果为true,则html标记的名称将呈现为“id [34] .propertyName”。括号中的数字将为每次迭代生成,并取自祖先逻辑:iterate tag。

但是,html:errors标记上没有相应的indexed属性,这限制了它的用途。此外,idnameproperty属性的必要组合可能相当混乱。

我发现使用jsp scriptlet生成包含迭代索引的属性名称更容易。以下代码要求您的表单具有字符串数组属性“quantity”。

<% int idx=0; %>
<logic:iterate ...>
    <html:text property='<%= "quantity[" + idx + "]" %>'/>
    <html:errors property='<%= "quantity[" + idx + "]" %>'/>
    <% i++; %>
</logic:iterate>