56

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

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

では、今何をすべきか?

4

8 に答える 8

46

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 モジュールがあるかどうかを調べることをお勧めします。

于 2009-02-17T20:01:18.007 に答える
36

どちらかを使用できます

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

于 2011-11-15T09:28:41.177 に答える
14

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

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

requestScopeorsessionScopeは Map オブジェクトであるためです。

于 2012-11-12T08:34:51.627 に答える
6

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

于 2010-02-08T16:40:13.443 に答える
5

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

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

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

<h:ouputText value="#{sessionScope['yourObject'].anyProperty }" />
于 2013-07-17T12:03:06.620 に答える
4

JSFページからリクエスト/セッションスコープ変数にアクセスできないのは確かですか?

これは、SpringSecurityを使用してログインページで行っていることです。

<h:outputText
    rendered="#{param.loginFailed == 1 and SPRING_SECURITY_LAST_EXCEPTION != null}">
    <span class="msg-error">#{SPRING_SECURITY_LAST_EXCEPTION.message}</span>
</h:outputText>
于 2009-02-18T09:32:03.783 に答える