問題タブ [postconstruct]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ajax - JSF の @PostConstruct メソッドは、マネージド Bean にビュー スコープが与えられている場合でも、すべての AJAX 呼び出しで呼び出されます。
次の簡単なテスト ケースが与えられます。
関連する JSF マネージド Bean:
または指定された が押されると<p:commandButton>
、アクションリスナーに加えてメソッドが呼び出されます - 。<p:commandLink>
init()
action()
init()
メソッドには、すべての AJAX 要求で不必要に呼び出されるべきではない高価なビジネス サービスが含まれている可能性があるため、これは発生しないはずです。
この動作を防ぐ方法はありますか? このinit()
メソッドは、AJAX 呼び出しで呼び出されるべきではありません。
JSF 2.2.6 と PrimeFaces 5.0 final を使用しています。
jsf-2 - 単一ページの読み込み中にコントローラーが複数回挿入される
ページに移動するかアクションを実行するたびに、CustomerController が複数回挿入されます。私の CustomerController は Request Scoped であるため、各リクエストは新しいインスタンスが作成されて注入されることを意味することを理解していますが、私が見ているものは私には過剰に思えます。
たとえば、アプリケーションを (エラーなしで) デプロイした後、index.xhtml
ページに移動します。index.xhtml
ページから [顧客を追加] リンクをクリックすると、そのページに移動しcustomer.xhtml
ます。これにより、customer.xhtml
ページが読み込まれるまでに 16 回の CustomerController インジェクションが発生します。この線
CustomerController.init が呼び出されました
(および関連する出力) が 16 回表示されます。init
メソッドには注釈が付けられているため@PostConstruct
、CustomerController が注入された後に呼び出されます。
新しい顧客を保存しようとすると、println
デバッグを支援するために行ったさまざまな呼び出しからログに 1,500 行が追加されます。ただし、コントローラーが何度も挿入されるため、それらのほとんどは繰り返しです。
CustomerController が何度も挿入されるのはなぜですか?
私が気づいたことは、javax.enterprise.context.RequestScoped
クラスの代わりにクラスをインポートするjavax.faces.bean.RequestScoped
と、期待する単一の注入動作が得られることです。これは、問題がJSFと(おそらく)JSFの使用にあり、Beanを一般的に注入する方法にあることを意味していると思います。
index.xhtml
顧客.xhtml
CustomerController.java
FormRequestController.java
web.xml
顔-config.xml
java - URL でページに入った後、コントローラーが呼び出されない
私はこの URL を持っています:
https://localhost:8181/Platform2/faces/admin/applicationDetails.xhtml?applicantid=16&applicationid=5
ブラウザでこれを紹介すると、このページのコンテンツを見るためにログインする必要があります。申請者と申請書の詳細を表示する必要があります (申請者と申請書は、私の Web Maven プロジェクトのエンティティです)。問題は、これを行うと、ページが何も取得しないことです。URLを再度入力すると、目的のコンテンツが表示されます。私のJSF Webページは次のとおりです。
私のバッキングビーンは次のとおりです。
デバッグするためにinitメソッドにブレークポイントを入れて、最初は呼び出されません。更新すると、Bean が呼び出され、すべてが正しく機能します。なぜ最初に結果が出ないのですか?
jsf-2 - @PostConstruct データが null になる
プライムフェイスを使用しています。にデータがありp:datatable
ます。ダイアログで行を編集しています。高速に(40秒未満で)実行すると、すべて問題ありません(データを保存できます)が、データをしばらく編集すると、Bean内のすべてのデータ(manegedBean、vievscope)が呼び出されnull
、PostConstruct
メソッドが呼び出されます-私編集された selectedRow データを失います。
jsf - java.lang.IllegalArgumentException: Der Rückgabetyp der Lebenszyklusmethode [init] muss "void" sein
GlassFish Server を使用して、NetBeans で Java/jsf Web アプリケーションを作成しています。アプリケーションをデプロイしようとすると失敗し、次のエラーが発生しました。
GlassFish サーバー ログ ファイル:
java - Spring autowired オブジェクトは postcontruct メソッドで null です
私は以下のセットアップを持っています
何が起こっている ?