将新项目添加到集合
使用类型转换和 alist
而不是 a set
,这将有助于将新项目添加到列表中:
<s:textfield name="locations[%{locations.size()}].locationName"/>
如果你想使用一套,那么我不知道如何在不花一些时间挖掘的情况下实现你想要的,但你会想从这里开始。
显示和编辑现有的集合项目
另一方面,如果您希望能够显示和编辑现有集合,那么如果您使用 alist
而不是 a ,这应该可以工作collection
:
<s:iterator var="listItem" value="yourList" status="listStatus">
<s:set name="paramName">yourList[${ listStatus.index }].someField</s:set>
<s:textfield name="%{#paramName}" value="%{#listItem.someField}"/>
</s:iterator>
在这里,您的模型将有一个名为 的列表yourList
。yourList 中的项目包含一个名为 的字段someField
。我们可以通过将请求参数名称设置为表单中的值来设置字段值,yourList[2].someField
以便对此OGNL
进行评估并将参数值设置到 yourList 的第 2 项的 someField 字段中。
使用您在上面显示的类,但将位置更改为列表,我们将拥有:
<s:iterator var="location" value="listOfLocations" status="locationStatus">
<s:set name="paramName">listOfLocations[${ locationStatus.index }]</s:set>
<s:hidden name="%{#paramName}.locationId" value="%{#location.locationId}"/>
<s:textfield name="%{#paramName}.locationName" value="%{#location.locationName}"/>
<s:textfield name="%{#paramName}.nearestHospital" value="%{#location.nearestHospital}"/>
</s:iterator>
或者,如果您正在使用JSTL
,这将执行相同的操作:
<c:forEach var="location" items="${ listOfLocations }" varStatus="locationStatus">
<s:set name="paramName">listOfLocations[${ locationStatus.index }]</s:set>
<s:hidden name="%{#paramName}.locationId" value="%{#location.locationId}"/>
<s:textfield name="%{#paramName}.locationName" value="%{#location.locationName}"/>
<s:textfield name="%{#paramName}.nearestHospital" value="%{#location.nearestHospital}"/>
</c:forEach>