Связывание pojo как объекта поддержки формы с множеством других pojos с динамическим созданием - PullRequest
2 голосов
/ 02 февраля 2011

Я использую Spring 3.0.2, Hibernate 3,5 (не уверен) и JSP для создания веб-приложения.При создании простой формы (поддерживаемой pojo с простыми атрибутами) все работает просто отлично.Однако сейчас я пытаюсь создать форму следующим образом:

  • задним числом pojo является Person с, скажем, атрибутом имени строки
  • Person имеет установленный атрибут контактов
  • Contact 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, чтобы этот наборКонтакты связаны:)

Заранее спасибо за совет

1 Ответ

0 голосов
/ 03 февраля 2011

Посмотрите на этот похожий stackoverflow вопрос :

Согласно ответу, наилучшим способом было бы установить коллекцию в виде списка

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

или как карта:

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

Вы можете использовать ленивый список ( Spring Autopopulation List , Apache Commons Lazy List , Guava lists ) или ленивую карту ( Guava's Map Maker , Ленивая карта Apache Commons ), поэтому вам не придется беспокоиться о создании нового объекта, когда он вам нужен в списке или на карте. Как только вы доберетесь до позиции, которая не была инициализирована, список / карта автоматически создаст новый экземпляр объекта.

...