将pojo绑定为表单后备对象与其他具有动态创建的pojos

时间:2011-02-02 19:47:58

标签: java collections binding spring-mvc set

我使用Spring 3.0.2,Hibernate 3,5(不确定)和JSP来创建Web应用程序。在创建一个简单的表单(由具有简单属性的pojo支持)时,一切正常。但是现在我正在尝试创建这样的形式:

  • 支持pojo是让我们说字符串名称属性
  • 的人
  • 人员已设置联系人属性
  • 联系pojo有String city和String phoneNumber属性

我希望能够在一个页面上编辑所有信息,这意味着编辑名称,指定城市和电话号码。
你们中的任何一个人都可以指导我如何绑定嵌套集合吗? 我应该在控制器中创建ModelAttribute(“contactsForPerson”)并将其传递给jsp并在我的jsp中使用它吗?

<form:form method="post" modelAttribute="person" >
<table>
    <tr>
        <td><form:hidden path="idPerson"/></td>
    </tr>
    <tr>
        <td>Name</td>
        <td><form:input path="name" value="${person.name}"/></td>
    </tr>
    <c:forEach items="${contactsForPerson}" var="a">
        <tr>
            <td>City</td>
            <td><form:input path="contacts.city" value="${a.city}"/></td>
        </tr>
        <tr>
            <td>Phone Number</td>
            <td><form:input path="contacts.phoneNumber" value="${a.phoneNumber}"/></td>
        </tr>
    </c:forEach>
</table>

问题本身归结为如何将Person的specity path属性设置为绑定联系人:)

提前感谢您的建议

1 个答案:

答案 0 :(得分:0)

看看这个类似的stackoverflow question

根据答案,最好的方法是将集合设置为列表

<form:input path="contacts[0].phoneNumber"/>

或作为地图:

<form:input path="contacts['contactId'].phoneNumber"/>

您可以使用惰性列表(Spring Autopopulating ListApache Commons Lazy ListGuava lists)或懒惰地图(Guava's Map MakerApache Commons lazy map),这样您就不会当你在列表或地图中需要它们时,不得不担心创建一个新对象。就在你进入一个尚未初始化的位置时,list / map会自动创建一个新的对象实例。