Spring mvc并通过列表迭代作为表单后备对象

时间:2012-03-09 11:48:15

标签: java spring spring-mvc

<form:form id="myFRM" action="${myURL}" method="POST" modelAttribute="myPOJO">
<c:set var="i" scope="page" value="0"/>
<c:forEach items="${myPOJO.myLIST}" var="myItem">
  <tr class="ui-state-default" >
  <td><form:checkbox path="myLIST[${i}].aBool" value="true"/></td>
 </tr>
 <c:set var="i" value="${i + 1}" scope="page"/>
</c:forEach>

有更好的方法吗?

myPOJO是一个包含列表的类,我纯粹是为了这个目的创建的 - 有没有办法直接引用列表作为表单支持对象?

2 个答案:

答案 0 :(得分:4)

c:forEach标记有一个名为varStatus的属性。这为循环状态变量指定了一个名称。此变量具有当前迭代的索引(基于零)和计数(基于一个)。

试试这个:

<c:forEach items="${myPOJO.myLIST}" var="myItem" varStatus="loopStatus">

和此:

<form:checkbox path="myLIST[${loopStatus.index}].aBool"/>

您不需要额外的i变量。

另外,我怀疑你不需要value="true"部分来复选框。

答案 1 :(得分:1)

您正在评估表达式$ {myPojo.fooBool},它返回字符串“false”。

在实践中,你写的是:

<form:checkbox path="false" value="true"/>

所以Spring正在你的bean中寻找名为“false”的属性(而不是寻找“fooBool”)。

尝试写作:

<form:checkbox path="fooBool" value="true"/>