2013-04-08 55 views
0

我有一个春天的控制器内@ResponseBody的方法和更新型号ResponseBody和SessionAttribute不兼容?

@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""; 
    } 
} 

这样做的问题是,基于myModel没有得到适当的,如果我离开了ResponseBody标签更新(我需要它,因为AJAX在其他方面等待答案),我想因为当使用@ResponseBody时,SessionAtributes显然不工作(因此我的更改丢失)。 当使用ResponseBody时,在此方法之后,无论何处需要“myModel”,都会实例化一个MyModel的新实例。

任何想法?谢谢!

回答

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); 
} 
+0

此外,ResponseEntity中的byte []是强制性的使这项工作。 – rubenafo 2013-04-18 06:58:52