0

Spring の Controller @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 を使用する場合、このメソッドの後、「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 に答える