我有两个类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
答案 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对象混合,例如Person
或Passport
。
答案 2 :(得分:0)
UI数据最好使用类,如TransferObjects是ModelObjects,它们代表页面数据绑定要求。如果我们这样做,我们可以将关注点移到控制器上,从UI对象中提取弹簧(持久)对象。
如果对象名为PassportForm,那么方法passportForm.person()和passportForm.Passport()应该为您提供持久对象。通过这种方式,我们还可以消除对变换器/验证器类的需要,并将行为推送到对象中。