0

そこで、JSPビューとJSTLタグを使用してSpring3Webアプリケーションを作成しています。これらは通常はうまく機能しますが、タグを適切に取得しないこの1つのコントローラー呼び出しがあります。

ModelAndView mav = new ModelAndView(
    new RedirectView(RequestUtil.getWebAppRoot(request) + clientShortName, false)
);
mav.addObject("status","Session for interface successfully removed");
return mav;

したがって、ビューで参照すると、次のような行になります。

<p>status="${status}"</p>

これは次のように表示されます:

status=""

これで、通常、ビューが不適切にレンダリングされる原因としてこれを却下しますが、実際には、これがURLに追加されていることがわかりました。

?status=Session+for+interface+zFXDEV3+successfully+removed

したがって、これには2つの質問があります。

  1. JSTLタグからオブジェクトを参照できないのはなぜですか?
  2. タグコンテキストの一部として取得できない場合、URLで何をしているのですか?

疑問に思っている人のために、クラスタイプは次のとおりです。

org.springframework.web.servlet.view.RedirectView.RedirectView
org.springframework.web.servlet.ModelAndView.ModelAndView(View view)
4

2 に答える 2

3

これはJSTLではなく、式言語(一般にELとして知られています)です。問題は、EL${status}がリクエスト属性で変数を検索することですが、JSPにリダイレクトすると、リクエストパラメータとしてのステータスがありますが、リクエスト属性としてはありません(これはページにリダイレクトするときの通常の動作であることに注意してください)。

より良い例(StackOverflow式言語コードから取得)の場合、これは実行されるものです:

<%
  String status = (String) pageContext.findAttribute("status");
  if (status != null) {
      out.print(status);
  }
%>

ここには2つの可能なオプションがあります。

  1. @SotiriosDelimanolisが述べているように、@ControllerこのURLのクラスはリクエストパラメータを受け取り、それらをリクエスト属性として追加する必要があります。将来、リクエストパラメータをさらに追加できるようになると、多くの作業が必要になります。

  2. ${param}リクエストパラメータへのアクセスを提供するELのオブジェクトを使用します。これを使用して、に変更${status}する必要があります${param.status}。物語の終わり。

于 2013-03-26T14:54:33.523 に答える
1

ですのでRedirectView。javadocによると:

デフォルトでは、すべてのプリミティブモデル属性(またはそのコレクション)はHTTPクエリパラメーターとして公開されます(URIテンプレート変数として使用されていない場合)が、この動作はisEligibleProperty(String、Object)メソッドをオーバーライドすることで変更できます。

そのため、Stringオブジェクトは、リダイレクトされた新しいリクエストのクエリパラメータとして追加されます。これらは、新しいリクエストのモデル/リクエスト属性としては使用できなくなりました。

@ControllerリダイレクトされたURLを処理するは、モデルに属性を再度追加する必要があります。

于 2013-03-26T14:40:23.593 に答える