如何将spring MVC jsp页面绑定到两个类

时间:2011-03-05 14:42:22

标签: java hibernate spring-mvc

我有两个类Person和Passport。 Passport有foreignkey = 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 个答案:

答案 0 :(得分:4)

您所要做的就是将表单支持对象包装在一个表单中:

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 :(得分:1)

我建议你创建一个以1:1的方式映射GUI表格的类,然后编写一个变换器/验证器。理想情况下,此类应该是GUI元素的包私有(甚至可能是内部类),因此它不会与DAO对象混合,例如PersonPassport

答案 2 :(得分:0)

UI数据最好使用类,如TransferObjects是ModelObjects,它们代表页面数据绑定要求。如果我们这样做,我们可以将关注点移到控制器上,从UI对象中提取弹簧(持久)对象。

如果对象名为PassportForm,那么方法passportForm.person()和passportForm.Passport()应该为您提供持久对象。通过这种方式,我们还可以消除对变换器/验证器类的需要,并将行为推送到对象中。