我目前有以下代码,数据显示正常。
<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”应该自动更新为新数量。
我已经尝试过寻求帮助,但我一直在寻找的只是如何显示数据的示例,而不是修改它。任何帮助将不胜感激。
答案 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
属性,这限制了它的用途。此外,id
,name
和property
属性的必要组合可能相当混乱。
我发现使用jsp scriptlet生成包含迭代索引的属性名称更容易。以下代码要求您的表单具有字符串数组属性“quantity”。
<% int idx=0; %>
<logic:iterate ...>
<html:text property='<%= "quantity[" + idx + "]" %>'/>
<html:errors property='<%= "quantity[" + idx + "]" %>'/>
<% i++; %>
</logic:iterate>