【发布时间】:2013-01-17 02:44:39
【问题描述】:
我在 Spring MVC 3 中遇到了一些奇怪的绑定问题。
我的控制器请求映射如下所示:
@RequestMapping
public String save(HttpServletRequest req,
@ModelAttribute("userEditForm") UserEditForm form,
BindingResult formBindingResult,
ModelMap model,
@ModelAttribute("session") AdminSession session) {
// some validation etc
}
UserEditForm:
public class UserEditForm {
private User user;
public User getUser() { ... }
public void setUser(User user) { ... }
}
AdminSession:
public class AdminSession {
private User user;
public User getUser() { ... }
public void setUser() { ...}
}
发生的情况是,当我提交表单时,Spring 正在绑定 User,正如我在 UserEditForm 对象中所期望的那样,但是,到目前为止,AdminSession 也被 Spring 绑定了 User因为它的属性值也会更新。
我假设这是由于在两个 @ModelAttribute 对象中都有一个 user 属性。
我认为在方法签名中的UserEditForm 表单之后添加BindingResult 会阻止这种情况吗?这些对象是单独的实例,我的表单元素引用了UserEditForm 对象:
<@spring.bind "userEditForm.user.name" />
<input name="${spring.status.expression}" />
我注意到它在生成的 HTML 中输出:
<input name="user.name" />
将名称硬编码为 userEditForm.user.name 会给我错误,所以这不是前进的方向。
有没有办法阻止这种情况发生?
【问题讨论】:
-
如果您要对名称进行硬编码,我认为您必须使用完全限定名称,从模型属性名称开始。因此,在您的示例中,我希望
标签: spring spring-mvc