つまり、webflow ビュー jsp で EL を使用して完全なクエリ文字列を取得するにはどうすればよいですか? これは私がやろうとしていることです:
<span class="forgot-password">
<a href="forgotPasswordRequest?<%=request.getQueryString() %>">
<spring:message code="screen.welcome.link.forgotPassword" />
</a>
</span>
scriptlet の代わりに EL を使用したい場合を除き<%=request.getQueryString() %>
ます。を使用して個々のパラメーターを取得するのは簡単に思えます${param.someParameterName}
が、すべてが必要です。具体的には、CASを SSO プロバイダーとして使用しています。service
認証するために、アプリは、認証の成功後に戻る URL であるパラメーターを含むクエリ文字列を使用して、ログインを CAS にリダイレクトします。このようなもの:
?service=http%3A%2F%2Fmysite.com%3A9080%2Fwelcome
CAS ログイン ページに、パスワードを忘れた場合の Webflow へのリンクがあります。そのサービス パラメータを他の Webflow に伝達する必要があります。だから私はこのようなことができます:
<span class="forgot-password">
<a href="forgotPasswordRequest?service=${param.service}">
<spring:message code="screen.welcome.link.forgotPassword" />
</a>
</span>
しかし、その後、すべての URL エスケープが失われます。さらに、将来保存したい他のパラメーターがある場合、それらも失われます。
スクリプトレットは現在機能していますが、見苦しく、プレゼンテーションにコードを含めるのは好きではありません (これは真の Java コードであるため)。EL は確かにはるかに洗練されたソリューションです。
春のドキュメントにリストされているすべての特別な EL 変数を調べましたが、まだ完全な queryString を取得する方法を思いつくことができませんでした。
- - - - - - - - - - - - - - - - アップデート - - - - - - - - - ---------------
わかりましたので、いくつかの根拠を作成しています...ExternalContext
インターフェースにgetNativeRequest()
は、実際のHttpServletRequest
オブジェクトである があることがわかりました。そこから、次のように完全なクエリ文字列を取得できます。
externalContext.getNativeRequest().getQueryString()
だから今、私はexternalContextと呼ばれる特別なEL変数があるので、私はこれを行うだけだと思います:
${externalContext.nativeRequest.queryString}
右?違う!externalContext
JSP ページから変数を使用できないことが判明しました。理由を知っている人はいますか?ただし、flowRequestScope
JSP で使用でき、getExternalContext
メソッドを持つ もあるので、これを行うことができます。
${flowRequestScope.externalContext.nativeRequest.queryString}
クール、それは機能します...しかし、なぜそれが必要なのですか? 特別な EL 変数の一部だけが JSP ページにプッシュされるのはなぜですか、また、それらの一部が変更されるのはなぜですか (viewScope
すべての値がルートに昇格されているように見えるため、viewScope.commandName は JSP で ${commandName} として参照されます)エル)?WebFlow の仕組みに根本的な何かが欠けているに違いありません。誰かが私を正しい方向に向けることができますか?