私はJSFをfaceletsで使用しており、JSFページ内でリクエストとセッションのパラメーターを取得する必要があります。 JSPページでは、"${requestScope.paramName}"
または"${sessionScope.paramName}"
のようなパラメーターを取得しました。しかし、JSFを使用すると、Beanのみが存在するようになり、Bean属性以外の値を取得できなくなります。
注:必要なセッション属性は、acegiセキュリティを使用して自動入力されるため、アクセスできません。
それでは、今何をすべきか?
次の式を使用して、リクエストパラメーターidを取得できます。
<h:outputText value="#{param['id']}" />
JSF 1.0仕様 のセクション5.3.1.2は、変数リゾルバーによって解決される必要があるオブジェクトを定義します。
また、Beanを使用して(スコープの要求が推奨されます)、FacesContextを使用してコンテキストに直接アクセスすることもできます。
次のコードを使用して、HttpServletRequestおよびHttpServletResposneオブジェクトを取得できます。
HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
この後、getParameter(paramName)
を介して個々のパラメーターにアクセスするか、getParameterMap()
req
オブジェクトを介して完全なマップにアクセスできます。
リクエストスコープBeanを提案する理由は、初期化中にこれらを使用できることです(最悪のシナリオはコンストラクタです。ほとんどのフレームワークは、Bean初期化時にコードを実行する場所を提供します)。
ただし、これはちょっとしたハックです。 ;)必要な変数へのアクセスを可能にするJSF Acegiモジュールがあるかどうかを調べることができます。
どちらかを使用できます
<h:outputText value="#{param['id']}" />
または
<h:outputText value="#{request.getParameter('id')}" />
ただし、パラメータをバッキングBeanに渡したい場合は、おそらくf:viewParam
を使用するのが望ましいでしょう。 「ビューパラメーターは、クエリ文字列パラメーターとモデル値の間のマッピングです。」
<f:viewParam name="id" value="#{blog.entryId}"/>
これにより、GETパラメーターのidパラメーターがブログBeanのentryId
フィールドに設定されます。詳細については、 http://Java.dzone.com/articles/bookmarkability-jsf-2 を参照してください。
あなたはこれを好きにすることができます:
#{requestScope["paramName"]} ,#{sessionScope["paramName"]}
requestScope
またはsessionScope
はMapオブジェクトであるためです。
OcpSoftの PrettyFaces のようなツールを使用して、動的パラメーター値をJSF Beanに直接注入することもできます。
マネージドBeanのFacesContext
の現在のインスタンスのセッションマップにオブジェクトを既に属性として配置していると仮定すると、JSFページから次のようにして取得できます。
<h:outputText value="#{sessionScope['yourObject'] }" />
オブジェクトにプロパティがある場合は、次の方法で取得します。
<h:ouputText value="#{sessionScope['yourObject'].anyProperty }" />
JSFページからリクエスト/セッションスコープ変数にアクセスできないのは確かですか?
これは、Spring Securityを使用してログインページで行っていることです。
<h:outputText
rendered="#{param.loginFailed == 1 and SPRING_SECURITY_LAST_EXCEPTION != null}">
<span class="msg-error">#{SPRING_SECURITY_LAST_EXCEPTION.message}</span>
</h:outputText>
Beanでは、session.getAttribute( "attributeName");を使用できます。