Spring在GET和POST请求之间丢失了模型属性

3

get方法将准备好模型并发送到“添加人员”jsp页面。
它也会将“mode”属性设置为“add”,以便添加和编辑可以共享同一个jsp页面。
当processSubmit结果有错误时,"mode"属性会消失。
如何在多次调用之间保留mode属性?

@RequestMapping(value="/people/def/add" , method = RequestMethod.GET)
public String personAdd(@ModelAttribute("person") Person person,Model map) {        
    map.addAttribute("mode", "add");
    //DO SOME LOGIC
    return "personAdd";
}

@RequestMapping(value="/people/def/add" , method = RequestMethod.POST)
public String processSubmit(@ModelAttribute("person") Person person,BindingResult result) { 
    personValidator.validate(person, result);
    if (result.hasErrors()) {
        //MODE ATTRIBUTE IS LOST
        return "personAdd";

请求属性仅在请求的生命周期内存在。因此,如果您希望在Post中将“mode”返回,您可能需要将其作为POST的一部分提交回来,可以通过在Web表单中使用隐藏表单控件来实现。 - Wand Maker
如何添加非bean属性作为隐藏属性?例如 <form:hidden path="mode"/> ? - JavaSheriff
是的。我认为您需要在“processSubmit”方法中添加“@RequestParam(“mode”)String mode”,以从HTTP POST参数中检索模式的值。 - Wand Maker
非常好,谢谢!您能发表一下您的答案吗?这样我就能接受它了。 - JavaSheriff
欢迎!已发布答案。 - Wand Maker
1个回答

3

请求属性仅存在于请求的生命周期内。因此,如果您想要在Post中返回“mode”,则可能需要将其作为POST的一部分提交回来,可以通过在Web表单中使用隐藏表单控件来实现。

您必须将"@RequestParam(“mode”)String mode"添加到"processSubmit"方法中,才能从HTTP POST参数检索出mode的值。


只需注意,如果您可以使用会话,您可以通过将它们作为会话属性(使用@SessionAttributes列表)来避免通过隐藏控件传递属性。 - hello_earth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接