我使用spring框架和其他一些框架(我是初学者)开发了一个MVC应用程序。我有一个控制器来管理jsp处理,例如当我想将新人添加到我的'人员列表'时,我调用实例化一个人对象,然后将其传递给与add方法对应的jsp视图。我通过这样的方法做到这一点:
@RequestMapping(value = "/persons/add", method = RequestMethod.GET)
public String getAdd(Model model) {
logger.debug("Received request to show add page");
// Create new UserDomain and add to model
// This is the formBackingOBject
model.addAttribute("personAttribute", new UserDomain());
// This will resolve to /WEB-INF/jsp/addpage.jsp
return "addpage-tiles";
}
我的问题是,现在,我想传递给模型添加两个不同的对象,例如,我想传递'new UserDomain()'以及另一个来自我数据库中其他表的对象,例如'new UserSecurity()'。 我想我应该使用'modelMap'而不是'model.addAttribute ...',但我不能这样做,所以如果有人可以帮助我。 我通过以下代码从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>
</tr>
<tr>
<td><form:label path="lastName">Last Name</form:label></td>
<td><form:input path="lastName"/></td>
</tr>
<tr>
<td><form:label path="userName">User name</form:label></td>
<td><form:input path="userName"/></td>
</tr>
<tr>
<td><form:label path="email">E-mail</form:label></td>
<td><form:input path="email"/></td>
</tr>
</table>
<input type="submit" value="Save" />
非常感谢你帮助我。
答案 0 :(得分:3)
简单地将多个对象传递给视图不是问题 - 只需多次使用model.addAttribute
,然后就可以访问这两个对象。
但是,如果要在<form:form>
中编辑多个模型,则需要创建一个包含两个对象的类:
public class UserDomainSecurity {
private UserDomain userDomain;
private UserSecurity userSecurity;
// getters and setters for both
}
然后将此实例传递给视图:
model.addAttribute("userDomainSecurity", new UserDomainSecurity());
并以以下形式使用:
<form:form commandName="userDomainSecurity" method="POST" action="${saveUrl}">
...
<form:input path="userDomain.firstName"/>
....
<form:input path="userSecurity.someSecurityProperty"/>
有时候必须创建所有这些额外的类,这有点烦人,但它有点合乎逻辑。包装类在表单中创建了一些名称空间,从而分离了您要编辑的各个对象。
答案 1 :(得分:0)
我想补充一点,因为它确实是我几分钟前遇到的问题。
在这种情况下,我假设您UserSecurity
和UserDomain
彼此相对。
假设你有,
public class UserDomain {
public UserSecurity userSecurity
public String firstName;
public String lastName;
// getters and setters...
}
你的UserSecurity类似于
public class UserSecurity {
public String someSecurityProperty;
// getters and setters...
}
由于可以公开访问userSecurity
属性,因此您可以执行您在Controller中所做的操作,
@RequestMapping(value = "/persons/add", method = RequestMethod.GET)
public String getAdd(Model model) {
logger.debug("Received request to show add page");
// Create new UserDomain and add to model
// This is the formBackingOBject
model.addAttribute("userDomainSecurity", new UserDomain());
// This will resolve to /WEB-INF/jsp/addpage.jsp
return "addpage-tiles";
}
然后只需在你的addpage.jsp中访问它,就好像它是一个像下面的对象属性
<form:form commandName="userDomainSecurity" method="POST" action="${saveUrl}">
...
<form:input path="firstName />
<form:input path="lastname />
....
<form:input path="userSecurity.someSecurityProperty"/>
正如您所注意到的,我通过UserDomain
类中声明的属性访问someSecurityProperty。