2013-04-08 4 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 и возвращение ResponseEntity с HTTPStatus общепринятым. Таким образом, клиентская сторона 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 является обязательным для выполнения этой работы. – rubenafo

Смежные вопросы