1

私は、ViewResolverとしてSpringMVCとThymeleafを使用してWebアプリケーションを開発しています。私は次のコントローラーハンドラーメソッドを持っています:

    @RequestMapping(value = "/something", method = RequestMethod.POST, params = "submit")
    public String doSomething(@ModelAttribute("error") String error /*, other attributes */) {
        // find out if there is an error 
        error = getErrorMessage();

        return "someHTMLfile";
    }

私のビューには次の行が含まれています:

<p><span th:text="${error}">Error Message goes here</span></p>

実行されると、タグは何にもレンダリングされません。これはおそらく${error}空の文字列を評価したためですが、理由がわかりません。Springの@ModelAttributeアノテーションは、Thymeleafがオブジェクトを見つけることができるモデルマップにオブジェクトを自動的に追加しませんか?

私が代わりに持っている場合:

@RequestMapping(value = "/something", method = RequestMethod.POST, params = "submit")
public String doSomething(ModelMap map /*, other attributes */) {
    // find out if there is an error 
    String error;
    error = getErrorMessage();
    map.addAttribute("error", error);

    return "someHTMLfile";
}

ビューはエラーメッセージで完全にうまくレンダリングされます。@ModelAttributeはオブジェクトをリクエストモデルに追加しませんか?

編集:私は両方をやってみました:

@RequestMapping(value = "/something", method = RequestMethod.POST, params = "submit")
public String doSomething(@ModelAttribute("error") String error, ModelMap map /*, other attributes */) {
    // find out if there is an error 
    error = getErrorMessage();
    map.addAttribute("error", error);

    return "someHTMLfile";
}

これも機能しません。

4

2 に答える 2

0

実際、あなたの問題はThymeleafに関連しているとは思いませんが、SpringMVCだけです:-)

最初のスニペットでは、リクエストモデルに何も追加しませんが、フォームから「エラー」というオブジェクトを取り戻そうとします。

2番目のスニペットでは、モデルにオブジェクトを追加します。これが、ビューが適切にレンダリングされる理由です。

ここのSpringMVCドキュメント(16.3.3.8)を見て、メソッド引数の@ModelAttributeアノテーションをよりよく理解してください。

于 2013-01-06T11:33:15.643 に答える
0

私は愚かだと感じますが、何であれ、私たちは皆間違いを犯します。

Springは私のために新しいStringインスタンスを作成し、それを私のメソッドとキーの下のモデルに注入していましたerror。文字列は不変のオブジェクトなので、そうするときはerror = getErrorMessage()、オブジェクトに別のインスタンスを割り当てerrorます。これで、Springのモデルに値が。のmyerrorとerrorがあります。そのため、Thymeleafレンダリングは空の文字列のみを検出します。String""

于 2013-01-06T23:59:08.140 に答える