4

@ModelAttribute("mymodel") を定義しました

@ModelAttribute("mymodel")
MyModel mymodel() {
  MyModel mymodel = new MyModel();
  return mymodel;
 }


@RequestMapping(value = "/save", method = RequestMethod.POST)
public final void save(@ModelAttribute("mymodel") MyModel mymodel, 
                           final BindingResult binding,
    final HttpServletRequest request, 
    final ModelMap modelMap) throws Exception {
    modelService.save(mymodel);

            // try to reset the model --> doesn't work!!!
    myModel = new MyModel();
}

問題は、save メソッドでモデルをリセットしても、保存操作の後にページをリロードして 2 回目の保存を行うと、モデルには前の のすべての値が含まれることですmyModel

処理後にリセットするにはどうすればよいですか?

4

4 に答える 4

2

私の推測を見逃していない限り、これは

myModel = new MyModel();

メソッド内の参照のみをリセットします。これは、 aMyModelから aを取得してList<MyModel>呼び出しmyModel = new MyModel();ても、List 内の要素は変更されず、ローカル参照のみが変更されるのと同じ方法です。

ほとんどの場合、new MyModel() をモデルまたは modelMap に配置する必要があります。

ここでは、投稿パターンの後のリダイレクトも役立つ場合があります。POST メソッドを用意する

return "redirect:originalpage.htm"

これにより、元のページが新しく再読み込みされます。また、更新を押しても POST が再送信されず、オブジェクトが 2 回保存されます。

于 2011-07-29T18:33:01.713 に答える
1

私はこのようにはしません。

次のように get リクエストでモデルを設定してみてください。

@RequestMapping(value = "/save", method = RequestMethod.GET)
public ModelAndView getSaveForm(ModelMap model) {
   model.addAttribute("mymodel", new MyModel());
   return new ModelAndView("newView", model);
}
于 2011-07-29T18:24:20.480 に答える
0

Portlets in Actionの BookCatalog をいじっているときに、同様の同じ問題に遭遇していました。私の解決策は、Model.addAttribute() を使用して手動でリセットすることでした。例えば:

@RequestMapping(value = "/save", method = RequestMethod.POST)
public final void save(@ModelAttribute("mymodel") MyModel mymodel, 
   final BindingResult binding,
   Model model
   final HttpServletRequest request, 
   final ModelMap modelMap) throws Exception 
{
   modelService.save(mymodel);
   model.addAttrubute("mymodel", new MyModel());
}
于 2012-11-30T20:03:08.090 に答える