4

私は次のようなログインコントローラメソッドを持っています:

@RequestMapping(value = "/home", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
    // do stuff with locale and model
    // return an html page with a login form
    return "home";
}

@RequestMapping(value = "/account/login", method = RequestMethod.POST)
public String login(Model model, /* username + password params */){
    try {
        // try to login
        // redirect to account profile page
        return "redirect:/account/profile";
    } catch (LoginException e) {
        // log
        // here I want to reload the page I was on but not with a url /account/login
        // possibly using a forward
        model.addAttribute("error", e.getMessage());
        return "forward:/home";
    }
}

上記のコードは、ログイン試行が成功した場合に機能します。forwardただし、Springは同じHTTPメソッドで現在のリクエストを使用するため、ログインの試行が失敗すると失敗します。したがって、POSTを使用してユーザー名/パスワードを送信したため(ログインが失敗しました)、転送はPOSTを使用して、のハンドラーメソッドに移動し/homeますhome()。これはGETを期待しています。

現在のモデルを維持しながら(エラーメッセージを表示したいので)、Springで別のHTTPメソッドを使用して別のコントローラーメソッドにリダイレクトする方法はありますか?

これはSpring3.2.1にあります。

4

1 に答える 1

4

代わりredirectに:

return "redirect:/home";

Modelリダイレクト後に属性を使用可能にする必要がある場合は、フラッシュ属性を使用できます。

于 2013-02-13T20:36:41.107 に答える