0

我在 Spring 的控制器 @ResponseBody 中有一个方法并更新模型

    @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 实例。

任何的想法?谢谢!

4

1 回答 1

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);
}
于 2013-04-10T08:18:24.683 回答