1

我有这个豆类

  Class Address {
    private String addressId;
    private Set<Location> setOfLocations;

    // more attributes


   //getters and setters

 }

 Class Location{
     private Long   locationId;
     private String locationName
     private String nearestHospital;

     //getters and setters
 }

在 jsp 中,我有一个用于 Address 类成员的 textField 控件,还有一个用于 LocationName 和最近医院的 Location 类成员。

Address 类成员通常映射,因为模型驱动的接口将它们映射到各自的字段。问题是我如何将位置文本字段映射到地址类的 Set 成员内的位置对象

4

1 回答 1

0

将新项目添加到集合

使用类型转换和 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>
于 2012-07-23T01:57:06.287 回答