2012-02-18 7 views
2

多くのPrimeFaces <p:remoteCommand/>を使用して、ページ上のさまざまなアクションリスナーを呼び出しています。 JavaScriptコールでは、パラメータを渡しています。これらのパラメータは、要求パラメータマップに到着します。マネージドBeanでリクエストパラメータを設定または注入する方法は?

これで、アクションリスナー自体のマップからパラメータを抽出できます。しかし、私が望むのは、アクションリスナーがそれをする必要がないことです。むしろ、Beanの適切な値がnullではないことを確認し、それに応じて動作するようにしてください。

これを単一のイベントで集中化するか、リクエストパラメータの値を何らかの形で自動的に注入することをお勧めします。

だから私の質問は次のとおりです。

  1. 私は任意のアクションリスナーが呼び出される前に、リクエストパラメータを処理するために処理できるイベントの種類はありますか?
  2. さらに、リクエストパラメータを自動的にBeanプロパティに注入する方法はありますか?

答えて

3

管理対象Beanが要求スコープの場合は、@ManagedPropertyを使用できます。リクエストパラメータマップは既に#{param}によって利用可能なELコンテキストにあります。

@ManagedProperty("#{param.foo}") 
private String foo; 

マネージドBeanがより広い範囲にある場合は、このために@ManagedPropertyを使用することはできません。ただし、CDIを使用している場合や使用できる場合は、homegrow注釈を付けることができます。

@Inject @HttpParam 
private String foo; 

JSFは、より広い範囲で豆を管理するための代替は<f:viewParam>タグです。私はそれが<p:remoteCommand>と組み合わせて働くかどうかだけを経験から伝えることはできませんが、理論的にはうまくいくはずです。 ViewParam vs @ManagedProperty(value = "#{param.id}")も参照してください。

+0

このビーンはビュースコープです。申し訳ありませんが、JavaScriptのアクションリスナーを呼び出してページの一部を更新する方法を提供する ' 'を使用していることが暗黙のうちに仮定していました。この種のことは、リクエストスコープのBeanでは通常は機能しません。ページごとの段階のリスナーを使用し始めましたが、現時点では少し厄介です。 –

+0

あなたの最善の策は、 ' 'です。 – BalusC

+0

私はViewParamと@ManagedPropertyを読み始めました。まず、 ' 'がURLにエンコードされたパラメータ以外のものに使用できることはわかりませんでした。次に、この記事によれば、ビューパラメータはUpdate Model Valuesフェーズに設定されます。このフェーズは、アプリケーションリクエスト値の後の2つのフェーズで、アクションリスナが呼び出される場所です。私はおそらく道のりです...私はそれを完全に読んで始めます。ありがとう。 –

関連する問題