1

JSFを使用してWebサイトを構築しています。Facelet ページが毎回ロードされるときにコードのブロックを実行したいので、セッション スコープ バッキング Bean を使用する必要があります。バッキング Bean のコンストラクターを使用してコード ブロックを実行しようとしましたが、初めてしか実行されませんでした。次のコードを使用していました。

<c:forEach var="p" items="#{statusBean.statusList}"
                        varStatus="loop">

はセッション スコープであるためstatusBean、ページが読み込まれたときに初めてコンストラクターを実行します。

初めてだけでなく、ページが読み込まれるたびにコードブロックを実行する他の方法はありますか?

4

1 に答える 1

0

これを達成するにはさまざまな方法があります。まず、「Facelets ページが読み込まれるとき」の意味を定義する必要があります。ページがレンダリングされる前という意味だと思います。

PreRenderViewEvent

JSF 2.x でこれを行う最も簡単な方法は、 のシステム イベント リスナですPreRenderViewEvent。このためには、最初に次のf:eventようなタグがページに必要です。

<f:event type="javax.faces.event.PreRenderViewEvent"
    listener="#{bean.preRenderView}"/>

のリスナーはPreRenderViewEvent、ビュー ルート ( ) に登録する必要がありますf:view。したがって、を使用しない場合f:eventは、の直接の子f:viewまたはどこかのトップ レベルである必要がありますf:view。With templatingは、同じことを保証するf:event内に配置する必要があります。ui:define

属性で参照されるリスナー メソッドlistenerは、ビューがレンダリングされる前に呼び出されます。メソッドは次のようになります。

public void preRenderView(ComponentSystemEvent ev) {
    //Do something
}

@PreRenderView

MyFaces CODI で CDI を使用する場合、マネージド Bean メソッドにアノテーションを付けるだけで@PreRenderView、ページがレンダリングされる前に呼び出されます。

アクションを見る

JSF 2.2 (まだ最終版ではありません) では、ビュー アクションを使用して、ライフサイクルのさまざまな段階でメソッドを呼び出すことができます。詳細については、JSF 2.2 ビュー アクションに関する私のJSFlive 投稿を参照してください。

私のGitHub リポジトリPreRenderViewEventでアクションの例を見つけて表示することができます

于 2013-04-11T20:12:37.190 に答える