@RequestMapping(method = RequestMethod.GET)
public String setupForm(@RequestParam("username") String username, ModelMap model, HttpServletRequest request) {
User userFromDB = userService.getUser(username);
UserPersonalDetails userDetails = userService.getUserPersonalDetails(username);
UserBackingObject user = new UserBackingObject(userDetails.getFirstName() + " " + userDetails.getLastName(), username, userDetails.getEmail(), userDetails.getTelephone());
model.addAttribute("user", user);
return EDIT_USER_VIEW;
}
@RequestMapping(method = RequestMethod.POST, params="save")
public String processSave(@ModelAttribute("user") UserBackingObject user, BindingResult result, ModelMap model, HttpServletRequest request) {
return LISTUSERS_VIEW;
}
以jsp的形式,我只显示用户详细信息(无法编辑或更改),并且我有提交按钮。
当我调试post方法时,用户对象(UserBackingObject)只有用户名,其余字段为null。我不明白为什么会发生这种情况,即使我已创建用户对象并添加到模型中'get'方法。为什么它没有在post方法中显示电子邮件或电话号码?支持对象的目的是发送和接收?有人可以解释清楚吗
答案 0 :(得分:4)
Spring MVC采用无状态方法。 这意味着(默认情况下)Spring不会在请求之间在服务器上存储与特定用户的任何对话状态。
因此,您在POST方法中获得的UserBackingObject
实例与您在GET方法中添加到模型的实例不同。 POST方法中的UserBackingObject
是从POST方法的HTTP参数重建的,即来自表单字段的值。这意味着只会填充HTML页面中具有相应字段的属性。
如果需要,您可以覆盖此默认行为by using @SessionAttributes
annotation。
因此,您可以使用@SessionAttributes
在表单中添加其他字段(可能隐藏)或存储模型属性。