15

RedirectionAttributes を介して BindingResult を渡そうとしています。

Spring - Redirect after POST (検証エラーがあっても)を参照しましたが、まだスタックしています。

私はGETメソッドを持っています:

@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(@ModelAttribute("exampleForm") final ExampleForm exampleForm, final Model model)
{
    return "test";
}

および POST メソッド:

@RequestMapping(value = "/doSomething", method = RequestMethod.POST)
public String doSomething(@Valid @ModelAttribute("exampleForm") final ExampleForm exampleForm, final BindingResult bindingResult, final RedirectAttributes redirectAttributes)
{
    if (bindingResult.hasErrors())
    {
        redirectAttributes.addFlashAttribute("org.springframework.validation.BindingResult.exampleForm", bindingResult);
        redirectAttributes.addFlashAttribute("exampleForm", exampleForm);
        return "redirect:/test";
    }
}

ただし、POST メソッドでそれらを受け取ったときに、GET メソッドのモデル (リダイレクト後) でバインド エラーが表示されません。それらは消えているようです。

POST メソッドの bindingResult オブジェクトは次のとおりです。 org.springframework.validation.BeanPropertyBindingResult: 1 errors

エラー 0 を示す GET メソッドのモデル エントリを次に示します。 org.springframework.validation.BindingResult.exampleForm=org.springframework.validation.BeanPropertyBindingResult: 0 errors

どんな助けでも大歓迎です。

4

4 に答える 4

6

これは決して良い答えではありませんが、回避策です。

flashAttribute を「exampleFormBindingResult」に設定してから、モデルの「org.springframework.validation.BindingResult.exampleForm」属性をオーバーライドする必要がありました

@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(@ModelAttribute("exampleForm") final ExampleForm exampleForm, final Model model)
{
    if (model.asMap().containsKey("exampleFormBindingResult"))
    {
        model.addAttribute("org.springframework.validation.BindingResult.exampleForm",
                model.asMap().get("exampleFormBindingResult"));
    }

    return "test";
}

キー「exampleFormBindingResult」を持つflashAttributeを追加しました:

@RequestMapping(value = "/doSomething", method = RequestMethod.POST)
public String doSomething(@Valid @ModelAttribute("exampleForm") final ExampleForm exampleForm, final BindingResult bindingResult, final RedirectAttributes redirectAttributes)
{
    if (bindingResult.hasErrors())
    {
        redirectAttributes.addFlashAttribute("exampleFormBindingResult", bindingResult);
        redirectAttributes.addFlashAttribute("exampleForm", exampleForm);
        return "redirect:/test";
    }
}

他の誰かがより良い答えを見つけてくれることを願っています。

于 2013-04-10T09:19:21.673 に答える
5

あなたのGETメソッドは好きなはずです

@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(final Model model)
{
    if(!model.containsAttribute("exampleForm")){
        model.addAttribute("exampleForm", new ExampleForm());
    }
    return "test";
}
于 2016-06-14T13:32:37.927 に答える