2013-04-08 74 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