Как привязать весеннюю MVC JSP-страницу к двум классам - PullRequest
1 голос
/ 05 марта 2011

У меня есть два класса Персона и Паспорт.У паспорта иностранный ключ = personid.

Это мой контроллер

model.addAttribute("personAttribute", new Person());

JSP PAge

<form:form modelAttribute="personAttribute" method="POST" action="${saveUrl}">
    <table>
        <tr>
            <td><form:label path="firstName">First Name:</form:label></td>
            <td><form:input path="firstName"/></td>
            <td><form:errors path="firstName"/>gfgf</td>
        </tr>




    <td><form:label path="country_issue">Passport:</form:label></td>
            <td><form:input path="country_issue"/></td>
            <td><form:errors path="country_issue"/></td>

Теперь я хочу поместить country_issue в другую таблицу паспортов.

У меня нет этого столбца в Person, так как я могу связать это на странице JSP

Passport has only id , person_id, country_issue field

Ответы [ 3 ]

4 голосов
/ 05 марта 2011

Все, что вам нужно сделать, - это обернуть объекты формы в форму:

public class MyForm
{
   private final Person person;
   private final Passport passport;

   public MyForm()
   {
      this.person = new Person();
      this.passport = new Passport();
   }

   public MyForm(Person person, Passport passport)
   {
      this.person = person;
      this.passport = passport;
   }

   // getters & setters
}

Тогда в вашем контроллере:

model.addAttribute("myForm", new MyForm());

или вы могли бы сделать

model.addAttribute("myForm", new MyForm(personService.findPerson(1), passportService.findPassport(1)));

и в вашем jsp:

<form:form modelAttribute="myForm" method="POST" action="${saveUrl}">
    <table>
        <tr>
            <td><form:label path="person.firstName">First Name:</form:label></td>
            <td><form:input path="person.firstName"/></td>
            <td><form:errors path="person.firstName"/>gfgf</td>
        </tr>
        <tr>
            <td><form:label path="passport.country_issue">Passport:</form:label></td>
            <td><form:input path="passport.country_issue"/></td>
            <td><form:errors path="passport.country_issue"/></td>
        <tr/>
    </table>
</form>
1 голос
/ 05 марта 2011

Я бы предложил вам создать класс, который отображает вашу графическую форму 1: 1, а затем написать преобразователь / валидатор.Этот класс в идеале должен быть закрытым для пакета (может быть, даже внутренним классом) для вашего элемента GUI, чтобы он не смешивался с объектами DAO, такими как Person или Passport.

0 голосов
/ 05 марта 2011

Данные пользовательского интерфейса лучше всего обрабатываются с помощью таких классов, как TransferObjects и ModelObject, которые представляют требования к привязке данных страницы.Если мы сделаем это, мы сможем переместить задачу в контроллер для извлечения пружинных (постоянных) объектов из объекта пользовательского интерфейса.

Если объект называется PassportForm, тогда методы passportForm.person () и passportForm.Passport() должен дать вам постоянный объект.Таким образом, мы также можем устранить необходимость в классах преобразователя / валидатора и передать поведение в объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...