問題タブ [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.
spring - 「プール」Bean が必要な他のすべての Bean を確実に取得するにはどうすればよいですか?
拡張する何百ものアクションを定義する春の設定がありますMyAction
。実行サービスがアクションを検索できるプールがあります。各アクションには、実行サービスが使用する 1 つ以上の「キー」があり、プールがその依存関係をカットするため、appContext を直接使用することはできません。
MyAction
したがって、プールは、タイプのすべての Bean (または拡張する Bean )を収集できる必要がありますMyAction
。
メソッドApplicationContext.getBeansOfType()
は必要なことをしているようですが、いつ安全に呼び出すことができますか?
メソッドでそれを呼び出すことができれば素晴らしいことです@PostConstruct
が、Bean ファクトリがその時点で構成からすべての Bean を追加したことを確認できることは保証されていますか?
注:私の豆のほとんどすべては@Lazy
spring - jsf-spring : managedbean ポストコンストラクトが呼び出されていません
私はむしろそうして学んでいるのですが、それはばかげた質問かもしれませんが、答えが見つかりませんでした.
シンプルな JDBC で使用するのと同じようにうまく機能する JSF アプリケーションがあります。
「DomainController」Bean からの要素を一覧表示するテーブルを含む「domain.xhtml」の例を見てみましょう。すべてうまく機能していたので、JPAに切り替えました。そのコントローラーはサービスを使用する必要があるため、@Component として宣言され、そこから (@Autowired) サービスが含まれます。また、すべての JSF インジェクション (@ManagedProperty) がインジェクトされなくなり、@PostConstruct も呼び出されなくなったことを除いて、うまく機能します。
私が見逃したもの、または続行する方法が間違っているものはありますか?
私の web.xml :
ありがとう !
jsf - GET パラメータを使用して JSF で SessionBean のデータを初期化する
私のナビケースは以下の通りです。ランディング ページがあり、そこからストア ページに移動できます。このストア ページは、2 つの異なる製品カタログを扱うことができます。これは、特定の Retailer オブジェクトによって制御されます。
ストア ページ以降、セッション中の Retailer に依存する複数の Bean とページがあります。小売業者を切り替えるイベントは、ランディング ページからの新しい選択です。選択範囲でアクションを実行してストア ページに移動するだけで、セッション中の Retailer を制御できました。ただし、これは Bean のアクションで制御する必要があります。
私の問題は、ナビゲーション バーからストア ページへの直接ナビゲーションの場合です。そのため、ストア ページで特定の Retailer を初期化するメカニズムが必要です。そして、これは、このページが依存するすべての Bean で実行する必要があります。これは GET パラメータを介して行う必要があります。preRenderView リスナーで複雑な決定を行うことでこの動作を行うことができますが、これがよりエレガントな方法だとは思いません。
したがって、根本的な問題は、データが複数の Bean (それらのスコープに関係なく) によって管理されているページへの直接ナビゲーションをインターセプトし、これらの Bean がアクションで使用するものをセッションに導入する方法です。
私はこれを試しました(SessionScoped Beanで):
1) @PostConstruct + @ManagedProperty(with param) を使用すると、Bean が SessionScoped であるため、Bean のインスタンス化中にエラーが発生します。
2) viewParam + preRenderView イベントを使用すると、イベントの前にパラメーターが挿入され、目的の動作が得られますが、これはページが読み込まれるたびに発生します。
この初期化を 1 回だけ行い、GET パラメータを使用したいと考えています。
どうすればいいですか?
jsf - Initメソッドは@ViewscopedBeanで2回呼び出されます
Primefacesのスケジュールコンポーネントを使用しています。私はデータベースからの値でそれを埋めています、そしてユーザーがselectonemenuからsthを選択するとajaxイベントがトリガーされます(sthが欠落しているplsがある場合は関連するコードだけを入れようとしました):
xhtml:
バッキングビーン:
上記のコードの出力は次のとおりです。
ユーザーがselectonemenuの値を変更した場合:
init
一度だけメソッドに入るはずです。ただし、changeScopeType
関数がトリガーされた後、関数はinit
メソッドに入り、スケジュールに関連のないデータを入力します。アノテーションに関係があるのではないかと思いましたが、@Postconstruct
説明が見つかりませんでした。誰かが理由を理解して解決策を提供できますか?
これが全ページです:
spring - 構築後のクラスでメソッドを呼び出すと、Spring Bean が注入されない
上記のエラーが発生しているjsfマネージドBeanプロパティにSpring Beanインジェクションを行っています。以下は、完全なスタック トレースです。
私のWeb xmlは次のとおりです。
私のアプリケーションコンテキストは次のとおりです。
私のfaces-configは次のとおりです。
私が含めたjarファイルは次のとおりです。
最後に、これは私が注入しようとしているコードの一部です:
直噴のようです。ここで何か不足していますか?私を案内してください。前もって感謝します。
編集: 今、私はクラス fillTable から @postConstruct アノテーションを削除し、fillTable を commandButton の「アクション」から呼び出しましたが、この例外は発生します。これは、@postConstruct メソッド呼び出し中に、Spring Bean がまだプロパティに注入されないことを意味しますか?
spring - @PostConstructはGrailsサービスでサイレントに失敗します
Springアノテーションは、Grails環境ではそのままで機能するはずだと思っていましたが、まったく機能しません。また、afterPropertiesメソッドも試しましたが、どちらも機能しませんでした。
誰かが間違いを見つけることができますか?実行する必要のある構成はありますか?
jsf-2 - SessionScoped Bean @PostConstruct が 2 回呼び出される
ユーザー認証を管理するための SessionScoped Bean があります。ユーザーが認証されると、メイン ページに追加のテキストが表示されます。
ページが読み込まれると、 START PHASE RENDER_RESPONSE 6の直後に @PostConstruct が (予想どおり) 呼び出されることがわかります。
ユーザーがログインをクリックするとフォームがロードされ、ユーザーがログインを送信するとログインメソッドが呼び出されることがわかります(認証も機能します)。その後、ユーザーは元のページにリダイレクトされます。START PHASE RENDER_RESPONSE 6の直後に、 loginBeanの @PostConstruct が再度呼び出されます。
import javax.faces.bean.SessionScoped; のインポートを確認しました。
この問題に関する多くの回答を読みましたが、これを解決する方法についてはまだ不明です。何か案は ?
メインページはこちら
これがSessionScoped Beanです
java - @PostConstruct を使用している場合、Hibernate はスレッドにバインドされたセッションを見つけることができません
Spring 3.0.x での処理方法をより反映するように、古い Spring プロジェクトを作り直しています。
私が行った変更の 1 つは、リポジトリ/dao レイヤーに対するものでした。ベスト プラクティスでアドバイスされているように、私は からHibernateDaoSupport
を使用するように拡張するのではなく、Spring 3.0.x 以降で動作するはずの をHibernateTemplate
使用して HibernateSessionFactory
を直接使用します。sessionFactory.getCurrentSession()
これはプロジェクト全体にとって非常に大きな恩恵であり、HibernateTemplate
. onStartUp
ただし、 @PostConstruct を使用していた (またはXML アプリケーションコンテキストでBean の属性を使用していた) Service メソッドを呼び出すことができなくなったことに気付きました。
たとえば、このメソッドは以前は を使用して問題なく動作してHibernateTemplate
いましたが、現在、Hibernate はスレッドにバインドされたセッションがないことを訴える例外をスローします。
このメソッド呼び出しを削除することもでき@PostConstruct
ます... システムで唯一のものです。アプリケーションが新しいアプリケーションのデータをブートストラップするために起動するときに呼び出されます。ほとんどの場合、本番システムでは何もしませんが、新たに作成されたテストおよび開発用データベースに使用すると便利です。
なぜ、どのように修正できるかについてのアイデアはありますか?
ありがとう!
編集:これが私のトランザクション管理アドバイス構成です:
jsf-2 - 復元ビューに顔のメッセージが再び追加されるのを止める
ポスト コンストラクトにいくつかの顔メッセージを追加します。ただし、現在のページからのナビゲーションがあると、ビューの復元フェーズ中にポストコンストラクトが再度呼び出され、faces メッセージが再度追加されます。
復元段階で顔のメッセージが追加されないようにする方法はありますか?
フェーズ ID を確認でき、メッセージを追加できません。
しかし、それは正しい方法ですか?他の方法はありますか?
jsf-2 - ポートレット環境でサービス呼び出しを処理する方法 (アクションごとに 2 つの要求)
JSF 2.0 と一緒にポートレット (jsr-286) を使用する場合に、セッション フラグの代わりになるものを探しています。
問題は、@PostConstruct を使用してバックエンドからデータをロードする必要があることです。その理由は、ポートレットが実行時に動的なポートレット ページ内にロードされるためです。そのため、ポートレットが最初にロードされるときに、RenderRequest に対して RESTORE_VIEW が呼び出され、いくつかのデータをロードするためにいくつかの Web サービスが呼び出されます。
ページでアクションをトリガーすると、ポートレット ランタイムの 2 つの要求で問題が発生します。最初に ActionRequest が処理され、再び RESTORE_VIEW が呼び出され、LifeCycle が INVOKE_APPLICATION の最後まで続行されます。ここで、RESTORE_VIEW と RENDER_RESPONSE を呼び出す RenderRequest が処理されます。
私の BackingBeans はすべて @RequestScoped です。これは、アクションを呼び出すときに @PostContruct が 2 回呼び出されることを意味し、Web サービスも 2 回呼び出されるため、パフォーマンスの問題が発生します。最も単純なアイデアは、ポートレット内でセッション フラグを使用することでした。これは、バックエンド サービスを呼び出す必要がある場合とそうでない場合を制御するために使用されます。
このアプローチに代わるより良い方法はありますか? Portlet-JSF2-Environment で他の人はどのように Bean の初期化を処理しますか?