我正在使用Spring 3.1并使用验证网页。字段级验证和错误显示工作正常。我的问题是在验证表单显示期间模型属性不可用。
假设我有代码:
@RequestMapping(value="/edit", method=RequestMethod.GET)
public String getEdit(@RequestParam("id") Long id, Model model) {
model.addAttribute("mytitle", "Hello There");
return "editObject"
}
@RequestMapping(value="/edit", method=RequestMethod.POST)
public String postEdit(@RequestParam("id") Long id, @Valid @ModelAttribute("object") MyData object, BindingResult result) {
if(result.hasErrors()) {
return "editObject";
}
[snip]
}
如果我有错误,则检测到hasErrors()并将其短路到地图“editObject”。但是,模型属性不可用。
我在这里使用什么?我尝试将一个Model引用添加到postEdit参数列表中,并再次添加“mytitle”属性等内容。
谢谢, 杰罗姆。
答案 0 :(得分:0)
当postEdit
控制器呈现editObject
视图时,您处于新请求中,因此您将丢失model
(之前为getEdit
操作设置)。
您需要做什么来重新设置新model
所需的任何值:
@RequestMapping(value="/edit", method=RequestMethod.POST)
public String postEdit(@RequestParam("id") Long id, @Valid @ModelAttribute("object") MyData object, BindingResult result, Model model) {
if(result.hasErrors()) {
model.addAttribute("mytitle", "Hello There");
model.addAttribute("object", object);
return "editObject";
}
如果您需要为不同的视图保留这些属性,您可以将它们存储在会话中(这样您就不必为每个新请求重新设置它们)。