1

Spring MVC の学習を始めたばかりです。私の初心者レベルがあなたをいらいらさせたらごめんなさい。

私の質問を短く明確にするために、次の簡単なコード例を使用しています。

私は2つの異なるSpring MVCコントローラーに2つの機能を持っています。最初のコントローラーでは、私は持っています:

@RequestMapping("/first")
public String first(Model model){
    model.addAttribute("user", "User Name");
    return "redirect:/second";
}

2番目のコントローラーで私は持っています:

@RequestMapping("/second")
public String second(){
    return "myView";
}

実際には、最初のものが 2 番目にリダイレクトされます。私のビュー(html)では、次のようなモデルの値を取得しようとすると:

<h1>Welcome! ${user} <h1>   //code in html to get user object

空を示しています。

私の質問は、Spring MVC で 2 つのリクエスト間をリダイレクトするときにデータを転送する方法です。これを達成するための最良の解決策は何ですか。モデルまたは他のアプローチでこれを達成できますか...? 前もって感謝します

4

1 に答える 1

2

で戻る

return "redirect:/second";

は、実際にページを探す場所をクライアントに伝えるヘッダーをDispatcherServlet含む 302 応答コードを返します。Locationあなたの場合は、 で探してください./second。ブラウザ経由でリクエストを行った場合、ブラウザは新しい HTTP GET リクエストをLocationヘッダーの URL に送信します。

Model属性と同様HttpServletRequestに、単一のリクエストのコンテキストにのみ存在します。あなたがしていることは 2 つのリクエストで発生するため、最初の属性は 2 番目のリクエストには存在しません。Flash 属性を使用する必要があります。

Spring 3.1 は、RedirectAttributesフラッシュ属性を実現するためのクラスを提供します。タイプのパラメーターをRedirectAttributesハンドラー メソッドに追加し、そのaddFlashAttribute()メソッドを使用して、次のリクエストでモデルに追加される属性を追加できます。

@RequestMapping("/first")
public String first(RedirectAttributes redirectAttributes){
    redirectAttributes.addFlashAttribute("user", "User Name");
    return "redirect:/second";
}

これが内部で行うことは、によって追加さaddFlashAttributeれたHttpSession属性を特別なキーで属性に追加することです。次のリクエストで、はその特別なキーを持つすべての属性をにDispatcherServlet追加します。HttpSessionModel

于 2013-10-01T20:53:48.383 に答える