我在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的新实例。
有什么想法吗?谢谢!
答案 0 :(得分:0)
解决。 可以在此处找到此问题说明和可能的解决方法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);
}