验证期间无法访问Model属性

时间:2013-01-24 13:39:03

标签: spring spring-mvc validation

我正在使用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”属性等内容。

谢谢, 杰罗姆。

1 个答案:

答案 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";
    }

如果您需要为不同的视图保留这些属性,您可以将它们存储在会话中(这样您就不必为每个新请求重新设置它们)。