我通過AJAX POST提交了一個,但是我的@ModelAttribute值失去了引用,導致應用程序崩潰。這是我的請求(使用合金UI,但該請求也很一般):AJAX POST失去對模型屬性的引用 - Spring
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]}
的形式,只有姓名,地址和電話號碼字段回來,因爲我不希望用戶更新anothe [R用戶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}
沒有填充任何預定義的字段,由於用戶標識不能爲空或0在子輸入上引發錯誤ñ。我正在尋找包括我的表單提交時更新和非更新的所有字段,但我不太清楚如何去做這件事。
到目前爲止,我已閱讀過有關Flash和重定向屬性,這可能是我需要的。有什麼想法嗎?
編輯:正如尼爾麥圭根解釋,我應該使用@SessionAttributes
。我需要的是模型屬性,可以在整個會話中保持訪問,而不僅僅是一個GET或POST。這可以通過會話屬性完成。
'<形式行動= 「/ saveUser(編號)」 方法= 「POST」>
''你在'/ saveUser'之後是否缺少'/'。它應該是'/ saveUser/{id}'? –
只是一個錯字我的斜線在那裏,但謝謝 –