ページが読み込まれたときにJSFマネージドBeanアクションを実行する方法はありますか?
それが関係しているなら、私は現在JSF1.2を使用しています。
ページが読み込まれたときにJSFマネージドBeanアクションを実行する方法はありますか?
それが関係しているなら、私は現在JSF1.2を使用しています。
JSFページに関連付けられたリクエストスコープのBeanのコンストラクターに目的のロジックを配置するだけです。
public Bean() {
// Do your stuff here.
}
リクエストで注釈付きメソッドを使用する@PostConstruct
か、スコープ付きBeanを表示します。すべての管理プロパティと挿入された依存関係の構築と初期化/設定の後に実行されます。
@PostConstruct
public void init() {
// Do your stuff here.
}
CDIなどのプロキシを使用するBean管理フレームワークを使用している場合は、コンストラクターよりもこれを強くお勧めします。これは、コンストラクターが予期したときに呼び出されない可能性があるためです。
<f:event type="preRenderView">
または、に基づいて初期化する場合<f:viewParam>
や、Beanがビュースコープよりも広いスコープに配置されている場合に使用します(これは設計上の問題を示していますが、それは別として)。それ以外の場合は、a@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.
}
<f:viewAction>
または、に基づいて初期化する場合<f:viewParam>
や、Beanがビュースコープよりも広いスコープに配置されている場合に使用します(これは設計上の問題を示していますが、それは別として)。それ以外の場合は、a@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";
}
load
イベント中にBeanアクションメソッドを実行することに実際に関心がある場合。もう1つの簡単な方法は、ビューがレンダリングされる前にメソッドをfireを使用することです。sessionScopeの場合、postConstructはセッションごとに1回だけ起動するため、これはpostConstructよりも優れています。これは、ページが読み込まれるたびに発生します。もちろん、これはJSF 2.0のみであり、JSF1.2ではありません。
これがその方法です-
<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
}
編集-これはこのページの質問に対する解決策ではありませんが、JSFのより高いバージョンを使用している人々のためだけにこれを追加します。
JSF 2.2には、を使用してこのタスクを実行する新機能がありますviewAction
。
<f:metadata>
<f:viewAction action="#{myController.onPageLoad}" />
</f:metadata>
@PostConstructは、Beanが作成されたときに最初に1回実行されます。解決策は、未使用のプロパティを作成し、このプロパティのGetterメソッドでアクションを実行し、次のようにこのプロパティを.xhtmlファイルに追加することです。
<h:inputHidden value="#{loginBean.loginStatus}"/>
そしてあなたの豆コードで:
public void setLoginStatus(String loginStatus) {
this.loginStatus = loginStatus;
}
public String getLoginStatus() {
// Do your stuff here.
return loginStatus;
}
からBeanアクションを呼び出す<p:remoteCommand>
ことをお勧めします。属性autoRun="true"を保持します。
以下の例
<p:remoteCommand autoRun="true" name="myRemoteCommand" action="#{bean.action}" partialSubmit="true" update=":form" />