繁体   English   中英

ResponseBody和SessionAttribute不兼容?

[英]ResponseBody and SessionAttribute incompatible?

我在Spring的Controller @ResponseBody中有一个方法并更新Model

    @SessionAttribute ("myModel")
    ...
    @RequestMapping(value = "addPoint", method = RequestMethod.POST)
    public @ResponseBody String addImgProvOption(
    @RequestParam("iRow") int iRow,
    @RequestParam("point") String point,
    @RequestParam("size") String size,
    @RequestParam("side") String side,
    @RequestParam("type") String type,
    @RequestParam("percentage") String percentage,
    @ModelAttribute("myModel") MyModel myModel,
    Model model)
    {
      OptionsRow userRow = new OptionsRow (point,size,side, type, 25);
      myModel.addOptionsRow (userRow, 0);
      model.addAttribute("myModel", myModel);
      return "addPoint"";
    }
}

问题是如果我留下ResponseBody标记,myModel无法正确更新(我需要它,因为另一端的AJAX等待回答),我认为是因为当使用@ResponseBody时,SessionAtributes显然不起作用(因此我的更改丢失了)。 使用ResponseBody时,在此方法之后,无论何时需要“ myModel”,都将实例化MyModel的新实例。

任何想法? 谢谢!

解决了。 可以在http://forum.springsource.org/showthread.php?93859-SessionAttributes-not-working-when-used-with-ResponseBody中找到此问题描述和可能的解决方法。

我以另一种方式解决了该问题,删除了ResponseBody并将带有HTTPStatus的ResponseEntity返回给ACCEPTED。 这样,将成功通知AJAX客户端。 现在,如果没有ResponseBody,则可以确认ModelAttribute的更改,因此将来的RequestMapping方法将按预期将其看到。

@RequestMapping(value = "addPoint", method = RequestMethod.POST)
public ResponseEntity<byte[]> addImgProvOption(
@RequestParam("iRow") int iRow,
@RequestParam("point") String point,
@RequestParam("size") String size,
@RequestParam("side") String side,
@RequestParam("type") String type,
@RequestParam("percentage") String percentage,
@ModelAttribute("myModel") MyModel myModel,
Model model)
{
  OptionsRow userRow = new OptionsRow (point,size,side, type, 25);
  myModel.addOptionsRow (userRow, 0);
  return new ResponseEntity<byte[]>(HttpStatus.ACCEPTED);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM