web-dev-qa-db-ja.com

JSFページからリクエストおよびセッションのパラメーターと属性を取得する

私はJSFをfaceletsで使用しており、JSFページ内でリクエストとセッションのパラメーターを取得する必要があります。 JSPページでは、"${requestScope.paramName}"または"${sessionScope.paramName}"のようなパラメーターを取得しました。しかし、JSFを使用すると、Beanのみが存在するようになり、Bean属性以外の値を取得できなくなります。

注:必要なセッション属性は、acegiセキュリティを使用して自動入力されるため、アクセスできません。

それでは、今何をすべきか?

53
Saeed

次の式を使用して、リクエストパラメーターidを取得できます。

<h:outputText value="#{param['id']}" />
  • param—パラメータ名をキーとする、このリクエストのリクエストパラメータの不変のマップ。各パラメーター名の最初の値のみが含まれます。
  • sessionScope-属性名をキーとする、このリクエストのセッション属性のマップ。

JSF 1.0仕様 のセクション5.3.1.2は、変数リゾルバーによって解決される必要があるオブジェクトを定義します。

87
McDowell

また、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モジュールがあるかどうかを調べることができます。

43
Drew

どちらかを使用できます

<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 を参照してください。

32
ustun

あなたはこれを好きにすることができます:

#{requestScope["paramName"]} ,#{sessionScope["paramName"]}

requestScopeまたはsessionScopeはMapオブジェクトであるためです。

13
Ming

OcpSoftの PrettyFaces のようなツールを使用して、動的パラメーター値をJSF Beanに直接注入することもできます。

6
Lincoln

マネージドBeanのFacesContextの現在のインスタンスのセッションマップにオブジェクトを既に属性として配置していると仮定すると、JSFページから次のようにして取得できます。

<h:outputText value="#{sessionScope['yourObject'] }" />

オブジェクトにプロパティがある場合は、次の方法で取得します。

<h:ouputText value="#{sessionScope['yourObject'].anyProperty }" />
5
Omar

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>
4
user7094

Beanでは、session.getAttribute( "attributeName");を使用できます。

0
Wandile Nxumalo