ボタン( )をクリックしたり、 .ActionEvent
AjaxBehaviorEvent
私の Bean は にあり@RequestScoped
、JSF 2.1 と Primefaces を使用しています。
ActionEvent
andは後で呼び出されるため、イベントのために呼び出されたという点でAjaxBehaviorEvent
Bean を伝える方法がわかりません。@PostConstruct
Bean が間違ったスコープに配置されているためですか?
ボタン( )をクリックしたり、 .ActionEvent
AjaxBehaviorEvent
私の Bean は にあり@RequestScoped
、JSF 2.1 と Primefaces を使用しています。
ActionEvent
andは後で呼び出されるため、イベントのために呼び出されたという点でAjaxBehaviorEvent
Bean を伝える方法がわかりません。@PostConstruct
Bean が間違ったスコープに配置されているためですか?
ページ読み込みのGET リクエストでのみコードを実行する
FacesContext#isPostback()
を返す場合は、(ポスト)コンストラクターをチェックインするだけfalse
です。
@PostConstruct
public void init() {
if (!FacesContext.getCurrentInstance().isPostback()) {
// ...
}
}
ちなみに、今後の JSF 2.2<f:viewAction>
では、代わりに new を使用できます。
<f:viewAction action="#{bean.init}" onPostback="false" />
Bean が間違ったスコープに配置されているためですか?
具体的な機能要件に依存します。適切な Bean スコープを選択する方法も参照してください。
ViewScoped で重大な問題が発生しました。それは常にシリアライズされたクラスを必要とします;) - さらに、「java.sql」でスライトの問題を引き起こします
これは、ビュー スコープではなく、独自のコード設計に問題があることを示しています。JDBC コードは JSF マネージド Bean に属しません。などのJDBC リソースは、インスタンス変数として決して宣言しないでConnection
ください。
RequestScoped Bean は、クライアントからサーバーに送信されるリクエストごとに再作成されます。そのため、ボタンをクリックするたびに @PostConstruct のロジックが実行されます。代わりに、ページの読み込みごとに作成される ViewScoped Bean を使用する必要があると思います。
このリンクで BalusC によって書かれたこの主題に関する優れたチュートリアルを見つけることができます: http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html#ManagedBeanScopes