【发布时间】:2015-09-09 21:09:07
【问题描述】:
我正在通过 AJAX POST 提交来自,但我失去了对我的 @ModelAttribute 值的引用,这会破坏应用程序。这是我的请求(使用 Alloy UI,但请求非常笼统):
Y.io.request( launches the ajax request
'/userEditForm/' + userID, //request string which calls the controller
{
method: 'GET',
on: {
success: function(e) {
showEditForm();
},
failure: function(e) {
alert(e.error.message);
}
}
});
我有一个返回用户表单的请求设置:
@RequestMapping(value = "/userEditForm/{id}", method = RequestMethod.GET)
public ModelAndView getUserEditForm(@PathVariable Long id){
ModelAndView mav = new ModelAndView("user");//user.html
User user = userRepo.findOne(id);
mav.addObject("user", user);
return mav;
}
此时我的所有模型属性都填充了值,
{user=User [getId()=123, getName()=Bob, getAddress()=54 Little Billy Lane, getPhone()=8457955555, getManager()=Jim Jimson]}
返回的表单仅包含姓名、地址和电话号码字段,因为我不希望用户更新其他用户的 ID 或经理
<form action="/saveUser/{id}" method="post">
<input type="text" name="name"><br>
<input type="text" name="address"><br>
<input type="text" name="phone"><br>
</form>
在提交时,我的 saveUser @Controller 被调用
@RequestMapping(value = "/saveUser/{id}", method = RequestMethod.POST)
public String saveUser(@ModelAttribute("User") User user, @PathVariable Long id, Model model) {
user = userRepo.findOne(id);
model.addAttribute("user", user);
userRepo.save(user);
return "success";
}
但是,在提交时,我的模型只保存表单上更新的值并排除其余的值
{user=User [getId()=0, getName()=Bob, getAddress()=42 Wallaby Way, getPhone()=7563434444, getManager()=null}
未填充任何预定义字段,这会引发错误,因为提交时用户 ID 不能为空或 0。我正在寻找在我的表单提交时包含所有更新和未更新的字段,但我不太确定如何去做。
到目前为止,我已经阅读了可能是我需要的 Flash 和重定向属性。有什么想法吗?
编辑:正如 Neil McGuigan 解释的那样,我应该使用 @SessionAttributes。我需要的是可以在整个会话中保持访问的模型属性,而不仅仅是单个 GET 或 POST。这可以通过会话属性来完成。
【问题讨论】:
-
<form action="/saveUser{id}" method="post"> <input type="text" name="name"><br> <input type="text" name="address"><br> <input type="text" name="phone"><br> </form>在/saveUser之后是否缺少/。应该是/saveUser/{id}吗? -
只是一个错字,我的斜线在那里,但谢谢
标签: javascript ajax forms spring-mvc