ページのロード時に JSF マネージド Bean アクションを呼び出す
-
20-09-2019 - |
質問
ページのロード時に 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";
}
以下も参照してください。
- ページの読み込み時にバッキング Bean で GET クエリ文字列 URL パラメータを処理するにはどうすればよいですか?
- <f:metadata>、<f:viewParam>、および <f:viewAction> は何に使用できますか?
- ネイティブ JavaScript を使用して HTML DOM イベントで JSF マネージド Bean を呼び出すにはどうすればよいですか? - HTML DOM 中に Bean アクション メソッドを実行することに実際に興味がある場合
load
ページの読み込み中ではなくイベントです。
他のヒント
もう一つの簡単な方法は、ビューがレンダリングされる前に、火にメソッドを使用することです。 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" />