質問

ページのロード時に JSF 管理対象 Bean アクションを実行する方法はありますか?

それが関連している場合、私は現在 JSF 1.2 を使用しています。

役に立ちましたか?

解決

JSF1.0 / 1.1

JSF ページに関連付けられたリクエスト スコープ Bean のコンストラクターに必要なロジックを挿入するだけです。

public Bean() {
    // Do your stuff here.
}

JSF 1.2 / 2.x

使用 @PostConstruct リクエストまたはビュースコープの Bean のアノテーション付きメソッド。施工後施工となります そして すべての管理プロパティと挿入された依存関係の初期化/設定。

@PostConstruct
public void init() {
    // Do your stuff here.
}

CDI などのプロキシを使用する Bean 管理フレームワークを使用している場合は、コンストラクターが予想どおりに呼び出されない可能性があるため、コンストラクターよりもこれを強くお勧めします。

JSF 2.0 / 2.1

あるいは、次を使用します。 <f:event type="preRenderView"> に基づいて初期化する場合は、 <f:viewParam> または、Bean がビュー スコープよりも広いスコープに配置されている場合も同様です (これは設計上の問題を示していますが、それはさておき)。それ以外の場合は、 @PostConstruct も全く問題ありません。

<f:metadata>
    <f:viewParam name="foo" value="#{bean.foo}" />
    <f:event type="preRenderView" listener="#{bean.onload}" />
</f:metadata>
public void onload() { 
    // Do your stuff here.
}

JSF 2.2+

あるいは、次を使用します。 <f:viewAction> に基づいて初期化する場合は、 <f:viewParam> または、Bean がビュー スコープよりも広いスコープに配置されている場合も同様です (これは設計上の問題を示していますが、それはさておき)。それ以外の場合は、 @PostConstruct も全く問題ありません。

<f:metadata>
    <f:viewParam name="foo" value="#{bean.foo}" />
    <f:viewAction action="#{bean.onload}" />
</f:metadata>
public void onload() { 
    // Do your stuff here.
}

これにより、 String 必要に応じてナビゲーションケースも取り付けます。これはリダイレクトとして解釈されます (したがって、 ?faces-redirect=true ここ)。

public String onload() { 
    // Do your stuff here.
    // ...
    return "some.xhtml";
}

以下も参照してください。

他のヒント

もう一つの簡単な方法は、ビューがレンダリングされる前に、火にメソッドを使用することです。 sessionScopeとするために、postConstructは一度だけ、すべてのセッション発生しますので、これはpostConstructよりも優れています。これは、ページがロードされるたびに発生します。これはJSF 1.2のためだけのためにJSF 2.0とではないofcourseのです。

これはそれを行う方法である -

<html xmlns:f="http://java.sun.com/jsf/core">
      <f:metadata>
          <f:event type="preRenderView" listener="#{myController.onPageLoad}"/>
      </f:metadata>
</html>

のmyController.javaの
 public void onPageLoad(){
    // Do something
 }

EDIT - これはこのページの質問に対する解決策はありませんが、私はちょうどJSFの以降のバージョンを使っている人のためにこれを追加します。

JSF 2.2はviewActionを使用してこのタスクを実行する新しい機能があります。

<f:metadata>
    <f:viewAction action="#{myController.onPageLoad}" />
</f:metadata>
ビーン作成されたときに

@PostConstructは、最初に一度だけ実行されます。 解決策は、未使用のプロパティを作成し、このプロパティのゲッターメソッドであなたのアクションを実行しています そして、このようなあなたの.xhtmlファイルにこのプロパティを追加します:

<h:inputHidden  value="#{loginBean.loginStatus}"/>

と、あなたのBeanのコードでます:

public void setLoginStatus(String loginStatus) {
    this.loginStatus = loginStatus;
}

public String getLoginStatus()  {
    // Do your stuff here.
    return loginStatus;
}

からBeanのアクションを呼び出すと、ののオートラン= "true" 属性を維持し、良いアイデアになります

以下の例
<p:remoteCommand autoRun="true" name="myRemoteCommand" action="#{bean.action}" partialSubmit="true" update=":form" />
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top