0

Spring 3.1を使用していて、検証を使用するWebページがあります。フィールドレベルの検証とエラーの表示は問題なく機能します。私の問題は、検証フォームの表示中にモデル属性が使用できないことです。

私がコーディングしたとしましょう:

@RequestMapping(value="/edit", method=RequestMethod.GET)
public String getEdit(@RequestParam("id") Long id, Model model) {
    model.addAttribute("mytitle", "Hello There");
    return "editObject"
}

@RequestMapping(value="/edit", method=RequestMethod.POST)
public String postEdit(@RequestParam("id") Long id, @Valid @ModelAttribute("object") MyData object, BindingResult result) {
    if(result.hasErrors()) {
        return "editObject";
    }
    [snip]

}

エラーが発生した場合、hasErrors()が検出され、マップ「editObject」に短絡します。ただし、モデル属性は使用できません。

ここでは何を使用しますか?postEditパラメータリストにモデル参照を追加し、「mytitle」属性などを再度追加してみました。

ありがとう、ジェローム。

4

1 に答える 1

0

postEditコントローラがビューをレンダリングするときeditObject、あなたは新しいリクエストにいるので、model(以前にgetEditアクションに設定された)を失っています。

あなたがそれをするために必要なことは、新しいものに必要な値をリセットしますmodel

@RequestMapping(value="/edit", method=RequestMethod.POST)
public String postEdit(@RequestParam("id") Long id, @Valid @ModelAttribute("object") MyData object, BindingResult result, Model model) {
    if(result.hasErrors()) {
        model.addAttribute("mytitle", "Hello There");
        model.addAttribute("object", object);
        return "editObject";
    }

これらの属性をさまざまなビューに保持する必要がある場合は、たとえばセッションに保存できます(これにより、新しいリクエストごとに属性を再設定する必要がなくなります)。

于 2013-01-24T16:57:28.447 に答える