Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将spring MVC jsp页面绑定到两个类_Java_Hibernate_Spring Mvc - Fatal编程技术网

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

Java 如何将spring MVC jsp页面绑定到两个类,java,hibernate,spring-mvc,Java,Hibernate,Spring Mvc,我有两个班:个人和护照。Passport有foreignkey=personid 这是我的控制器 model.addAttribute("personAttribute", new Person()); JSP页面 <form:form modelAttribute="personAttribute" method="POST" action="${saveUrl}"> <table> <tr> <td&

我有两个班:个人和护照。Passport有foreignkey=personid

这是我的控制器

model.addAttribute("personAttribute", new Person());
JSP页面

<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>

我建议您创建一个类,将GUI表单映射为1:1,然后编写一个转换器/验证器。理想情况下,这个类应该是GUI元素的包私有类(甚至可能是内部类),这样它就不会与DAO对象混合,例如
Person
Passport

我建议您创建一个映射GUI表单1:1的类,然后编写一个转换器/验证器。理想情况下,该类应该是GUI元素的包私有类(甚至可能是内部类),这样它就不会与DAO对象(如
Person
Passport

等)混合使用诸如TransferObject是表示页面数据绑定要求的ModelObject之类的类来管理UI数据。如果我们这样做,我们可以将关注点转移到控制器上,从UI对象中提取spring(持久)对象


如果该对象名为PassportForm,则PassportForm.person()和PassportForm.Passport()方法应为您提供持久对象。通过这种方式,我们还可以消除对transformer/validator类的需求,并将行为推送到对象中。

UI数据最好使用TransferObject之类的类来管理,这些类表示页面数据绑定需求。如果我们这样做,我们可以将关注点转移到控制器上,从UI对象中提取spring(持久)对象


如果该对象名为PassportForm,则PassportForm.person()和PassportForm.Passport()方法应为您提供持久对象。通过这种方式,我们还可以消除对transformer/validator类的需求,并将行为推送到对象中。

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

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>

名字:
玻璃纤维生长因子
护照:

只需将表单支持对象包装到表单中:

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>

名字:
玻璃纤维生长因子
护照: