web-dev-qa-db-ja.com

ページ読み込み時にバッキングBeanでGETクエリ文字列URLパラメータを処理するにはどうすればよいですか?

JSFを使用してパラメーターを送信する方法を読みましたが、ユーザーがログインページにアクセスするときにcompanyIdをURLに入力するとどうなりますか?例えば、

http://my.company.url/productName/login.faces?companyId = acme

これを行う方法として、リクエストから値を取得してセッションで設定するスクリプトレットコードが少しあります。このパラメーターは、ログインページから先にルックアンドフィールを変更するため、各顧客は異なるログインページビューを持つことができます。 JSFに切り替えるまでextjsを使用しています。

JSF 2またはおそらくPrimeFacesを使用してそれを行う方法はありますか?

31
Big Al

はい。 _<f:viewParam>_ を使用して、リクエストパラメータをマネージドBeanプロパティとして設定できます。

_<f:metadata>
    <f:viewParam name="companyId" value="#{bean.companyId}" />
</f:metadata>
_

必要に応じて、_<f:viewAction>_(JSF 2.2+のみ)または_<f:event type="preRenderView">_を使用してBeanアクションを呼び出すことができます。

_<f:metadata>
    <f:viewParam name="companyId" value="#{bean.companyId}" />
    <f:viewAction action="#{bean.onload}" />
</f:metadata>
_

_<f:viewAction>_を使用すると、ナビゲーション結果を返すこともできます。

_public String onload() {
    // ...

    return "somepage";
}
_

JSF 2.2をまだ使用していない場合は、 ExternalContext#redirect() を使用できます。とりわけ preRenderViewリスナーメソッドでナビゲーションを実行する方法 も参照してください。

これはPrimeFacesに固有のものではないことに注意してください。これは標準のJSFの一部です。 PrimeFacesは、強化されたAjaxおよびスキナビリティサポートを提供するコンポーネントライブラリにすぎません。

こちらもご覧ください:

49
BalusC

urlパラメータはリクエストパラメータとして扱うこともできるため、

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
24
user1415890

すぐに使用できるユーティリティライブラリ OmniFaces があります。

@Inject @Param
private String key;

@Inject @Param
private Long id;
5
Toumi