0

我正在使用 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”。但是,模型属性不可用。

我在这里用什么?我尝试将模型引用添加到 postEdit 参数列表并再次添加诸如“mytitle”属性之类的内容。

谢谢,杰罗姆。

4

1 回答 1

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

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

于 2013-01-24T16:57:28.447 回答