DHR*_*SAL 9 spring spring-mvc java-ee
我有我的用户对象,我试图用弹簧MVC绑定到UI.用户对象中有另一个对象Address.
public class User {
String firstName;
String lastName;
String userName;
Address address;
}
Run Code Online (Sandbox Code Playgroud)
地址obj.
public class Address {
String street;
String House;
String country;
}
Run Code Online (Sandbox Code Playgroud)
当我将用户对象绑定到UI时说对于编辑用户功能我只想保留firstName和lastName.
现在我的第一个问题是,如果我不将用户的其余属性保留为隐藏字段,那么我将获得这些值为null.这意味着UI上的绑定对象是User对象的新实例.我不能处理同一个用户对象并将其绑定到UI上,只获取旧值的更新值吗?
其次:通过隐藏字段方法我没有得到Address对象,我得到null
<form:hidden path="user.address" />
Run Code Online (Sandbox Code Playgroud)
用户是我的模态属性.
我不知道,我对Spring MVC的理解可能存在差距.对于UI上的绑定对象,我们总是要创建新实例吗?如果嵌套我们如何在绑定的模态属性中获得嵌套对象(Address)?
一旦选项,我猜是使用粘合剂.但据我所知,binder还将使用id获取对象?请给出解决方法,我可以保存我的查询以获取该对象
Bha*_*ikh 14
要Address
恢复您的对象,您需要列出每个属性:例如:
<form:hidden path="user.address.street" />
<form:hidden path="user.address.country" />
Run Code Online (Sandbox Code Playgroud)
等等.
现在,绑定到UI的对象是从控制器传递的对象.我假设当表单被提交时,你想要将User
对象作为一个回来@ModelAttribute
.在这种情况下,您有两个选择:第一个是您需要User
在客户端列出对象的所有属性(作为隐藏对象或可见表单元素).
第二个选项是:你只显示在客户端所需要的属性,而不是列出所有其他化子性质的隐藏字段,只保留id
你的User
实例作为隐藏字段.现在,当您@ModelAttribute
在表单提交时收到此内容时,您可以使用在数据库中加载整个对象,id
并在调用之前在其上设置更新的属性update
.
对于前:
@RequestMapping("updateUser.do")
public String updateUser(@ModelAttribute User user, ... /* rest of the args */) {
// ... some other code
User existingUser = userService.findById(user.getId());
existingUser.setFirstName(user.getFirstName());
existingUser.setLasstName(user.getLastName());
userService.update(existingUser);
// ... rest of the code
}
Run Code Online (Sandbox Code Playgroud)
您无法仅在客户端上的必需属性上工作,并将其与同一现有对象合并.
归档时间: |
|
查看次数: |
8293 次 |
最近记录: |