我正在使用struts2将html表生成为jsp文件。我想更改此arraylist中包含的值,但是行为不是我所期望的...

我的流程:
Action.java:生成一个数组列表“结构”,其中包含MyElem类型的“ n”个对象(例如5个)。

private ArrayList<MyElem> struct;
public void setStruct(...) {...}
public ArrayList<MyElem> getStruct() {...}


以及MyElem的详细信息:

private String name;
private String type;
private int length;
private int precision;
private String usage;
private String init;


当然,所有的getter和setter都会被声明。

test.jsp:

<s:iterator value="struct" status="elemsStatus">
<tr>
<td><s:textfield name="struct.name" value="%{name}" theme="simple"/></td>
    <td><s:textfield name="struct.type" value="%{type}" theme="simple"/></td>
    <td><s:textfield name="struct.length" value="%{length}" theme="simple"/></td>
    <td><s:textfield name="struct.precision" value="%{precision}" theme="simple"/></td>
    <td><s:textfield name="struct.usage" value="%{usage}" theme="simple"/></td>
    <td><s:textfield name="struct.init" value="%{init}" theme="simple"/></td>
    </tr>
</s:iterator>


然后当我在struct上迭代时返回Action.java,我没有5个对象MyElem,但有30个:每行一个带有“名称”的对象,一个带有“类型”的对象,依此类推……
实际上,我想通过html表中的行将一个对象MyElem构造为结构。

谢谢 !

最佳答案

设置索引属性的正确语法是

<s:iterator value="struct" status="elemsStatus">
<tr>
<td><s:textfield name="struct[%{#elemsStatus.index}].name" value="%{name}" theme="simple"/></td>
    <td><s:textfield name="struct[%{#elemsStatus.index}].type" value="%{type}" theme="simple"/></td>
    <td><s:textfield name="struct[%{#elemsStatus.index}].length" value="%{length}" theme="simple"/></td>
    <td><s:textfield name="struct[%{#elemsStatus.index}].precision" value="%{precision}" theme="simple"/></td>
    <td><s:textfield name="struct[%{#elemsStatus.index}].usage" value="%{usage}" theme="simple"/></td>
    <td><s:textfield name="struct[%{#elemsStatus.index}].init" value="%{init}" theme="simple"/></td>
    </tr>
</s:iterator>

10-07 16:37