【问题标题】:Binding pojo as form backing object with Set of other pojos with dynamic creation将 pojo 作为表单支持对象与动态创建的其他 pojo 集绑定
【发布时间】:2011-02-02 19:47:58
【问题描述】:

我正在使用 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 的路径属性以便绑定联系人集:)

提前感谢您的建议

【问题讨论】:

    标签: java collections binding spring-mvc set


    【解决方案1】:

    看看这个类似的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),这样您在创建新对象时就不必担心需要它们在列表或地图中。就在您到达尚未初始化的位置时,列表/地图将自动创建该对象的新实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 2011-10-30
      • 2014-05-02
      • 2018-04-11
      • 1970-01-01
      • 2016-09-15
      相关资源
      最近更新 更多