0

春のチュートリアルと例のほとんどは、リソースファイルからメッセージを取得する方法と、ビュー(jsp)にメッセージを表示する方法を示していますが、コントローラー内およびビュー間でこれらのメッセージを処理する方法は示していません。

これは、忘れたパスワードを処理するビュー/コントローラーがある場合に、これをどのように実行するかの例です。パスワードが送信されると、「パスワードが送信されました...」というメッセージとともにログイン画面にリダイレクトされます。

@RequestMapping(value="/forgottenpassword")
public String forgottenpassword(@RequestParam String email) {
     ....something something
     if(email != null){
         return "redirect:/login?forgottenpassword=ok";
     }
}

@RequestMapping(value="/login")
public String login(HttpServletRequest request) {
    if(request.getParameter("forgottenpassword") != null && request.getParameter("forgottenpassword").equals("ok")) {
        data.put("ok_forgottenpassword", "forgottenpassword.ok");
    }

    return "login";
}

最後に、メッセージをビューに表示します。この場合は、フリーマーカーテンプレートです。

<#if (ok_forgottenpassword?exists)>
     <div class="alert alert-success"><@spring.message "${ok_forgottenpassword}" /></div>
</#if>

これはSpringフレームワークでそれを行うための最良の方法ですか?1種類のメッセージだけで簡単ですが、5種類必要な場合はどうなりますか?

4

3 に答える 3

0

次のようなエラーをコントローラのリストに追加します

List<String> errorsList = new ArrayList<String>();
errorsList.add("error.invalid.username");
errorsList.add("error.invalid.password");
errorsList.add("error.invalid.passwordResetLinkSent");
.....

次に、jspページですべてのエラーを繰り返して次のように表示します

 <c:if test="${!empty errorsList}">
    <ul>
    <c:forEach var="error" items="${errorsList}">
        <li><spring:message message="${error}"></spring:message></li>
    </c:forEach>
    </ul>
  </c:if>
于 2012-06-27T05:39:23.713 に答える
0

シンプルな Bean を作成してデータにプッシュするだけです。その Bean では、リソースバンドルからロードしたいすべてのメッセージを持つことができます。(ちなみに、リソースバンドルは本当に必要ですか? i18n が必要でない限り、まったく不要ないくつかの巧妙なトリックを実行します。他のほとんどの場合は、単純なプロパティファイルで十分です。)

于 2012-06-27T02:21:26.447 に答える
0

この手法は実際にはフラッシュ メッセージと呼ばれ、この回答にあるように Spring 3.1 で実装されています: https://stackoverflow.com/a/7808960/142824

于 2012-06-27T10:37:21.520 に答える