問題タブ [codi]
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.
eclipse - Myface CODI が Eclipse で例外をスローしない
Eclipse IDE で Myfaces、Primefaces、Tomcat を使用して JSF 開発を行っています。テストを実行すると、Eclipse コンソールで Myfaces/Primefaces によって例外がスローされていました。
最近、MyFaces CODI と OpenWebBeans を追加して開発環境を強化しました。これを実行して以来、Eclipse コンソールにエラー メッセージが表示されなくなりました。理由がわかりません。
nullpointerexception、メソッド/変数が見つからないなどの基本的なエラーでさえスローされません。Myface CODI ステージを開発として設定しました。会話の開始と停止に関連する MyFace CODI メッセージを受け取りますが、すべての例外とエラーがスローされることはありません。
これらの単純なエラーを発見するために myfaces/primefaces/bean コードをデバッグするのはイライラします。
Eclipse環境で例外を再び取得するために何ができるかを誰かが提案できますか? この問題により開発が大幅に遅れているため、緊急の支援が必要です。
java - CDI - CODI - 生成時の ViewAccessScoped = エラー
そのようなベーキングビーンからデータを取得するjsfページで
java.lang.StackOverflowError が発生しました。
私のバッキングビーンはそのように見えます。プロデューサーにデータをキャッシュさせ、後でそれをオーバーライドしたいのです...
ViewAccessScope 中にリストを維持したいだけです
ところで、Producer を SessionScope に変更しても問題はないようです
サーブレットの例外は次のとおりです。
ループがそのように見えるスタックエラー:
jsf - 「ターゲットに到達できません。識別子 'bean' が null に解決されました」を修正するには?
@ViewScoped にアクセスするために、JSF 2.1.7 と Primefaces 3.2、CDI、および Apache MyFaces CODI を使用しています。
すべてが問題なく動作していますが、ui:param を介して Bean を別のページに渡し、その Bean を特に ap:ajax 要求で使用しようとすると、「ターゲットに到達できません。識別子 'bean' が解決されました。ヌル"
次に、page.xhtml でこれを実行しようとします。
bean.simpleModel への最初の呼び出しは適切に解決されます。bean.onMarkerDrag への ajax 呼び出しはそうではありません。
formBean の私の宣言は @Named("formBean"), @ViewScoped です。
何か案は?
ajax - CODIの@Advancedを使用したFacesConverterのCDI@Injectは、AJAXリクエストで機能しますか?
インジェクションを使用できるようにするために、sを使用し、それらに'sアノテーションを付けFacesConverter
ますCODI
。これは通常のリクエストで機能します。ただし、リクエストに応じて、注入されたBeanはnullになります。そして、パラメータ@Advanced
CDI
AJAX
CDI
FacesContext
インジェクションが機能する場合の通常の要求org.apache.myfaces.context.servlet.FacesContextImpl
の代わりになります。org.apache.myfaces.extensions.cdi.jsf2.impl.listener.request.CodiFacesContextWrapper
リクエストに応じてインジェクションを機能させる方法を知っている人はいFacesConverter
ますAJAX
か?ありがとう。
jsf-2 - ViewMapListener JSF が呼び出されていない
@ViewScoped
JSFアノテーションを CDIに移植しようとしています。その理由は、必要性に基づくというよりも、より教育的なものです。この特定のスコープを選択した主な理由は、CDI で実装したいカスタム スコープの具体的な例が不足しているためです。
そうは言っても、私の出発点はJSF アノテーションを CDIに移植すること@ViewScoped
でした。しかし、この実装は、 APIで言及されているContext (つまり、破棄)の一見非常に重要な責任を考慮していません。
コンテキスト オブジェクトは、Contextual のオペレーションを呼び出して、コンテキスト インスタンスを作成および破棄します。特に、コンテキスト オブジェクトは、インスタンスを Contextual.destroy(Object, CreationalContext) に渡すことによって、作成したコンテキスト インスタンスを破棄する責任があります。破棄されたインスタンスは、後で get() によって返されてはなりません。コンテキスト オブジェクトは、インスタンスを作成したときに Contextual.create() に渡したものと同じ CreationalContext のインスタンスを Contextual.destroy() に渡す必要があります。
Context
オブジェクトを作成して、この機能を追加することにしました。
- どのs
Contextual
に対してどのオブジェクトを作成するかを追跡します。UIViewRoot
- ViewMapListenerインターフェイスを実装し、
UIViewRoot
を呼び出して、それぞれのリスナーとして自身を登録しますUIViewRoot.subscribeToViewEvent(PreDestroyViewMapEvent.class, this)
。 Contextual
が呼び出されたときに作成された をすべて破棄し、ViewMapListener.processEvent(SystemEvent event)
それ自体を登録解除しUIViewRoot
ます。
これが私のContext
実装です:
Disposable
インターフェースは次のとおりです。
スコープの注釈は次のとおりです。
CDI 拡張宣言は次のとおりです。
上記をCDIに正しく登録するために、javax.enterprise.inject.spi.Extension
ファイルをMETA-INF/services
含むの下に追加しました。com.example.CustomContextsExtension
次のような Bean を作成できるようになりました (カスタム@ViewScoped
実装の使用に注意してください)。
Bean は適切に作成され、JSF ページに適切に注入されます (つまり、ビューごとに同じインスタンスが返され、ビューが作成されたときにのみ新しいインスタンスが作成され、同じインスタンスが同じビューへの複数の要求に対して注入されます)。どうすればわかりますか?上記のコードにデバッグ用のコードが散らばっていると想像してください。
問題は、 myViewContext.isListenerForSource(Object source)
とViewContext.processEvent(SystemEvent event)
が呼び出されないことです。ビュー マップはセッション マップに格納されているため、少なくともセッションの有効期限が切れたときにこれらのイベントが呼び出されることを期待していました (正しいですか?)。セッションのタイムアウトを 1 分に設定して待機し、タイムアウトが発生したことを確認しましたが、リスナーはまだ呼び出されていません。
また、次のものを追加しようとしましたfaces-config.xml
(ほとんどの場合、アイデアが不足しているため)。
最後に、私の環境はJBoss AS 7.1.1
ですMojarra 2.1.7
。
手がかりは大歓迎です。
編集: さらなる調査。
PreDestroyViewMapEvent
が期待どおりに起動されている間は、まったく起動されていないようですPostConstructViewMapEvent
- 新しいビュー マップが作成されるたびに、特にUIViewRoot.getViewMap(true)
. ドキュメントには、ビューマップで呼び出されるPreDestroyViewMapEvent
たびに起動する必要があると記載されています。clear()
それは疑問に思います-そもそもclear()
呼び出される必要がありますか? もしそうなら、いつ?
このような要件を見つけることができたドキュメント内の唯一の場所は次のFacesContext.setViewRoot()
とおりです。
現在の UIViewRoot が null でなく、引数ルートで equals() を呼び出し、現在の UIViewRoot を渡して false を返す場合、UIViewRoot#getViewMap から返されたマップで clear メソッドを呼び出す必要があります。
これは通常の JSF ライフサイクルで、つまりプログラムで呼び出すことなく発生することはありますUIViewRoot.setViewMap()
か? 何の兆候も見当たらない。
java - MyFacesCODI-プロジェクトに追加
私はMavenJSFWebアプリを開発しています。一部の@ViewScopedBeanで@PreDestroyを使用したいのですが、これはJSF 2.0では不可能です(またはページを閉じたりリダイレクトしたりする場合は不可能です)。MyFacesCODIの@ViewAccessScopedが解決策になる可能性がありますが、追加に問題があります。私がこれを試すとき:
コンパイル中にエラーが発生します。
依存関係のないプロジェクトはうまく実行されます。
エラーログを同封しています:
jsf-2 - Partial State Saving と MyFaces CODI での重複 ID エラー
PrimeFaces3.3、MyFaces+CODI、OpenWebBeans、および Tomcat7 を使用して JSF Web アプリケーションを開発しています。
特定のページ (後続のすべてのページ アクション) を表示した後、ID の重複エラーが発生します。デバッグでviewrootを分析したところ、重複するIDは実際には見つかりませんでしたが、「WindowContextIdHolderComponent」には重複としてスローされるID(j_id6)があることがわかりました。
PARTIAL_STATE_SAVING を「true」にして以来、この問題が発生し始めました。
タブを持つメインビューがあり、各タブにはメニューがあり、各メニューアクションはタブでページをロードします
以下は、私のアプリケーションのコードと構造です。
メインページ
Adminmain.xhtml ページ (タブ ページ)
以下は、重複IDエラーを引き起こすadminGalleryページです(他のすべてのページにはこの問題はありません)
このページは正しく表示されますが、このページの表示後のすべてのリクエストは重複 ID エラーで失敗します。
私のBeanはCODI WindowScopedです。
Duplicate Id に関するさまざまな提案された回答に基づいて、問題の潜在的な原因として ui:include のみが表示されます。しかし、タブ内またはタブ間で他のページに問題がないので、それは問題ではないと思います。
ここで何が問題であるか、および潜在的な修正を提案してください。
jsf - JSF CDI (溶接) 新しい会話を開始する
どうすれば CDI で新しい会話を開始できるのだろうと思いました。cid 要求パラメーターがない場合、コンテナーは新しい会話を開始するように見えますが、コントローラーから明示的に新しい会話を開始したい場合があります。
例: JSF ページを使用して、会話スコープのコントローラー Bean によるエンティティ保持を編集します。ajax リクエストが送信され、コントローラーのメソッドが呼び出されてイベントが発生し、新しい会話内の別のコントローラーで編集する必要があるサブエンティティが渡されます。その問題の解決策が見つかりません。私はすでに Apache Myfaces CODI を調べましたが、その問題を解決するパターンも見つかりません。
それから私を助けてください。
[編集] Ok。たぶん、私は問題を十分に詳しく説明していませんでした。もう一度試してください: 異なる (新しい) 会話 ID を持つ「同じ」会話スコープのコントローラー Bean の新しいインスタンスにアクセスしたい場合。それはどのように機能しますか?あなたが持っている画像..言ってみましょう.. 1つの Order エンティティを編集するための OrderControllerBean 。このコントローラーには、public void createSubOrder() のような JSF アクション メソッドがあります。このメソッドは、新しい Order を作成し、それを使っていくつかの凝った処理を行う必要があります。その後、別の会話 ID を持つ新しい OrderControllerBean インスタンスに渡す必要があります。おそらくCDIイベントを使用して。関係ない。問題は、OrderControllerBean が会話に既に存在することです。現在の注文を編集するために使用されます。そのため、作成したばかりのサブオーダーの作成および編集には使用できません。では、OrderControllerBean の新しいインスタンスを作成するにはどうすればよいでしょうか? たぶん、これはこれを行う正しい方法ではありません。しかし、これまでのところ、空白のcidパラメーターを使用してブラウザーを新しいURLに送信せずに、新しい会話を作成する別の可能性を見つけることができません. しかし、これらの会話の間で情報を交換することはできません。会話 1 で作成された非永続的な注文を、会話 2 の同じコントローラーに移動するにはどうすればよいですか? 私の問題は、会話の会話についてです。会話 1 で作成された非永続的な注文を、会話 2 の同じコントローラーに移動するにはどうすればよいですか? 私の問題は、会話の会話についてです。会話 1 で作成された非永続的な注文を、会話 2 の同じコントローラーに移動するにはどうすればよいですか? 私の問題は、会話の会話についてです。
[編集] ドキュメント全体と、これまでに付属しているすべての例を読みました。これらのステートメント (http://docs.jboss.org/cdi/spec/1.0/html/contexts.html#conversationcontext) によると、CDI 会話は JSF と密接に結びついているようです。残念ながら、技術的な詳細を詳しく説明しているドキュメントは見つかりません。新しいリクエストを送信して新しい会話を取得する方法は他にないため、新しい会話がいつどのように開始されるかについてのロジックをビュー レイヤーで直接保持する必要があります。それは間違いなく私が想像できる最善の方法ではありません。私の次の試みは Seam 3 の評価です。なぜなら、Seam 2 には @Begin および @End アノテーションがあり、会話をより詳細に制御できるようになったことを覚えているからです。会話の伝播を指定できるタグ ライブラリもいくつかありました。他の誰も私のような質問をしていないのはなぜだろうと思っています。現時点では、CDI が複雑なプロジェクトにあまり普及していないか、または物事がどのように機能するかを理解するのに大きな問題があります。これまでのところ、単純なデモ以上の CDI/CODI の例を見つけることができません。使用されているポータブル拡張機能に関係なく、会話の高度な使用を示す例へのリンクを誰かが持っている場合は、お知らせください。
java - Tomcat + CDI + JSF2 ですが、トランザクションはどこにありますか?
私の会社には、分散環境として tomcat 7 があります。JSF2 と CDI を tomcat 7 で連携させたいと考えています。これは、ここで説明されているように、あまり驚くことではありません: http://www.theserverside.com/tutorial/Working-with-CDI-and-JSF- 20-on-Tomcat-7-Configuring-Weld
私の問題はトランザクションに関するもので、Java EE 3 ソリューションがない場合は次のようになります。
- 手でやる: em.getTransaction().begin() ...
- 自分で作成した CDI インターセプターまたは CODI http://matthiaswessendorf.wordpress.com/2010/11/20/enterprise-java-without-ejbs-but-with-cdi-and-myfaces-codi/などを使用します。
- 春のトランザクションを使用しますが、私が知る限り、JSR 299 と 330 の間に問題があり、機能するには接着剤が必要です: http://matthiaswessendorf.wordpress.com/2010/05/06/using-cdi-scopes-with-春-3/
それで、あなたが私だったらどこに行きますか?CODIは私にはいいようです。
どうも