4

我已经定义了一个 @ModelAttribute("mymodel")

@ModelAttribute("mymodel")
MyModel mymodel() {
  MyModel mymodel = new MyModel();
  return mymodel;
 }


@RequestMapping(value = "/save", method = RequestMethod.POST)
public final void save(@ModelAttribute("mymodel") MyModel mymodel, 
                           final BindingResult binding,
    final HttpServletRequest request, 
    final ModelMap modelMap) throws Exception {
    modelService.save(mymodel);

            // try to reset the model --> doesn't work!!!
    myModel = new MyModel();
}

问题是,即使我在 save 方法中重置了模型,但如果我在保存操作后重新加载页面并再次保存,模型会包含之前的所有值myModel

处理后如何重置?

4

4 回答 4

2

除非我猜错了,这是因为

myModel = new MyModel();

只会重置方法中的引用,就像MyModel从 a获取 aList<MyModel>然后调用myModel = new MyModel();不会更改 List 中的元素,只会更改您的本地引用。

您很可能需要将新的 MyModel() 放入模型或模型映射中。

发布模式后的重定向在这里也可能对您有用。有你的 POST 方法

return "redirect:originalpage.htm"

这应该重新加载原始页面,并且还意味着如果您点击刷新,您将不会重新提交 POST,从而保存您的对象两次。

于 2011-07-29T18:33:01.713 回答
1

我不会这样做的。

尝试在获取请求中设置您的模型,例如:

@RequestMapping(value = "/save", method = RequestMethod.GET)
public ModelAndView getSaveForm(ModelMap model) {
   model.addAttribute("mymodel", new MyModel());
   return new ModelAndView("newView", model);
}
于 2011-07-29T18:24:20.480 回答
0

我在处理Portlets in Action 中的 BookCatalog 时遇到了类似的问题。我的解决方案是使用 Model.addAttribute() 手动重置它。例如:

@RequestMapping(value = "/save", method = RequestMethod.POST)
public final void save(@ModelAttribute("mymodel") MyModel mymodel, 
   final BindingResult binding,
   Model model
   final HttpServletRequest request, 
   final ModelMap modelMap) throws Exception 
{
   modelService.save(mymodel);
   model.addAttrubute("mymodel", new MyModel());
}
于 2012-11-30T20:03:08.090 回答
0

当我们想要在控制器完成处理后添加响应标头时,下面的示例方法有效。@ModelAttribute("mymodel") 在控制器方法处理之前调用,因此我们不能根据处理结果放置任何值。//在请求方法中添加参数“HttpServletResponse”

@RequestMapping(方法= RequestMethod.POST,值= APIConstants.Request_URL,标头= APIConstants.Request_HEADER,产生= APIConstants.PRODUCES)公共@ResponseBody PojoRS autheticateByPassword(@RequestBody()PojoRQ apiRequest,HttpServletResponse响应)抛出异常{

    try
    {
        // All code related to processing

    }
    catch(Exception e)
    {
        throw e;
    }
    //Just before sending back the response add below line
    response.setHeader("Response_Key","Response_Header_value");
    return PojoRS;
}
于 2021-01-22T16:19:13.750 回答