質問

現在、コントローラーの onSubmit() からモデルを返そうとしています。次に、これを JSP で取得しようとしています。

例えば

Map model = new HashMap();
model.put("errors", "example error");
return new ModelAndView(new RedirectView("login.htm"), "model", model);

そしてそれを取得します

<c:out value="${model.errors}"/>

ただし、これでは何も表示されません。正しいリダイレクトビューに移動し、エラーは発生しませんが、テキストは表示されません。

ご協力をよろしくお願いいたします。

ありがとう

役に立ちましたか?

解決

RedirectView が行うことは、リダイレクト ヘッダーをブラウザーに送信することで、ブラウザーがページを完全にリロードします。その結果、モデルはそこに引き継がれません (現在、独自のモデルを持つログイン コントローラーによって処理されているため)。

できることは、リクエスト属性を通じてエラーを渡すことです。

あなたのviews.propertiesで:

loginController.(class)=org.springframework.web.servlet.view.InternalResourceView
loginController.url=/login.htm

次に、RedirectView の代わりに次を返します。

request.setAttribute("errors", "example errors");
return new ModelAndView("loginController");

そして、ログイン コントローラーでこの属性を確認し、モデルに追加します。

アップデート: views.properties を使用しない場合:

request.setAttribute("errors", "example errors");
return new ModelAndView(new InternalResourceView("/login.htm"));

または、(別の) 内部ビュー リゾルバーを App-servlet.xml に追加することもできます (API からのメモ:ViewResolver をチェーンする場合、InternalResourceViewResolver は、基になるリソースが実際に存在するかどうかに関係なく、ビュー名の解決を試みるため、常に最後にある必要があります。):

<bean id="viewResolver2"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>

そして、次のように使用します。

request.setAttribute("errors", "example errors");
return new ModelAndView("/login.htm");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top