問題タブ [conversation-scope]
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.
jsf-2 - begin が 2 回呼び出されたときの JSF/CDI 会話スコープのエラー
私は CDI 会話スコープを使用していますが、ユーザーが通常のシナリオに従えば問題ありません。ただし、ユーザーが「会話」を完了しないと、次のエラーが発生します。
明らかに、endメソッドを呼び出さずにbeginメソッドを2 回呼び出すためです。
それを明確にするために、これは私のシナリオです:
- 最初のページで、ユーザーは参照番号で製品を検索します。見つかった場合は、 conversation.beginを呼び出して、製品の詳細ページに移動します。
- このページで、ユーザーが保存ボタンを押すと、この時点でconversation.endを呼び出します。
問題は、ユーザーが除外する詳細ページにいるとき (たとえば、メニュー内のリンクをクリックしたとき) であるため、endメソッドが呼び出されないことです。そして、検索ページに戻ると、 beginが再度呼び出されるため、エラーが発生します。
考えられる解決策の 1 つは、ユーザーが 2 ページ目に存在するときにendメソッドを呼び出すことです。しかし、これを達成する方法がわかりません。
(私はJSF 2.1を使用しており、CDIのWeld 1.1.6実装を使用しています)
前もって感謝します
java - f:ajax 会話が見えない
AJAX イベントに少し問題があり、どこが間違っているのかを誰かが教えてくれるかどうか疑問に思っていました。
ページにドロップダウンがあり、それが変更されたときに、このページの別の部分を更新する必要があります。会話を長時間実行しないでページを使用すると、すべて正常に動作します。しかし、長時間の会話を開始してドロップダウン ボックスを使用しようとするとすぐに、「WELD-000321 ID 1 の復元する会話が見つかりませんでした」というエラーが表示されます。誰かがこれの理由を考えることができますか? 会話が開始され、ページで利用できると確信しています。これは Tomcat 6 で実行され、Mojarra 2.1.6、Weld 1.1.5 を使用し、PrimeFaces も使用されます (ただし、この部分には関係しません)。
f:ajax タグの onerror が原因でエラーが発生していることがわかります。これは、発生しているエラー オブジェクトを出力する JavaScript 関数を呼び出しています。最初のページ リクエストのコードをデバッグすると、会話が開始され、会話を出力するコードの一部 (#{collectionHome.conversation}) が会話を返します。
私のコードの縮小版は次のとおりです。
フォーム:
コレクションホーム:
エンティティホーム:
java - 会話 ID がインクリメントされる原因
CDI 会話の問題を突き止めようとしています。アプリケーションを介して 1 つのルートをたどると機能するページがありますが、別のルートをたどると機能しません。私はそれが何か会話に関連していると信じていますが、私は何を理解することができません.
作業ワークフローは次のようになります。
- ページ A を読み込む
- 編集ページ A を開く
- この時点で、ID 1 で新しい会話が開始されます。
- 編集して保存すると、ページ A が返されます
- ページ A のリンクをクリックして、ページ B を読み込みます
- 編集ページ B を開く
- 会話は ID 2 で開始されます。この開始時に更新を押すと、ID 3 で会話が開始されます。他の更新により、会話 ID が増加します。
- 編集が正常に行われました
動作しないワークフローは次のとおりです。 動作するワークフローは次のように発生します。
- ページ A を読み込む
- ページ A のリンクをクリックして、ページ B を読み込みます
- 編集ページ B を開く
- 会話は ID 1 で開始されます。ページを更新すると、会話 ID がまだ 1 であることがわかります。
- ページ上のさまざまなアクションで、「WELD-000321 ID 1 の復元する会話が見つかりませんでした」という例外がスローされます。
したがって、2 つのワークフローの違いは、作業中のワークフローでは編集に成功し、2 番目の編集ページにいるときに増分会話 ID を取得することです。機能しないワークフロー、会話 ID は常に 1 ですが、何もできません。
私が理解しようとしているのは次のとおりです。
- ID が 1 の会話をしている場合、何かをしてから会話を終了し、新しい会話を開始すると、ID は何になりますか? 1 (この会話が終了したため) または 2 (次の未使用 ID)。
- 会話が適切に終了していないこと以外に、会話 ID の増加に必要なものはありますか? 私が知る限り、私は会話を正しく閉じています。
うまくいけば、これらのいずれかに対する答えが、何が問題なのかを明らかにするでしょう。ご意見ありがとうございます
scope - Seam - PAGE スコープと CONVERSATION スコープを理解する
私はまだPAGE
とCONVERSATION
(temp) スコープについて混乱しています。多分私はここで助けを得ます。私の知るPAGE
限り、スコープにアウトジェクトされた変数は、ユーザーが同じページをポストバックするだけで有効です。代わりに、一時的なCONVERSATION
スコープは、次のページへのリダイレクト後も存続します。これは、私を混乱させる 2 つの効果の小さな例です。
まず、コンポーネントとアウトジェクションがCONVERSATION
スコープ内にあり、tempUser
データが jsf ページに表示されます。しかし、その jsf ページから呼び出された save メソッドでは、注入されたのtempUser
は null です。なんで?
次に、同じことを行ってコンポーネントと @In/@Outs スコープをPAGE
スコープに変更すると、ポストバックで正しく挿入されますが、 -method onが呼び出されtempUser
ても、なんらかの理由で保存されません。それとも、homeEntities をそのように使用することに問題がありますか (DAO ラッパーとしてのみ使用するという考えです)。super.update()
userHome
xhtml には aa:form が含まれています。
返信ありがとうございます。申し訳ありませんが、これが 1 つの 2 つの問題である場合。
servlets - 会話スコープBeanに投稿する方法、またはサーブレットからこのBeanにアクセスする方法
シナリオでは、サーバーのWebサイトにデータを投稿する必要があるクライアントのWebサイトがあります。投稿中、サーバーはログインページを開いてクライアントを認証し、認証が成功するとデータをデータベースに保存します。
javaee6、jsf、ejbを使用しています。
質問:1。)サーブレットに投稿していますが、会話スコープBeanを取得できないため、ログイン画面に投稿されたデータを表示すると同時に、会話スコープBeanに保存できます。ログインに成功したら、Beanからデータを取得し、データベースに保存します。
2.)会話スコープのバッキングBeanを使用して、ページに直接投稿できますか?
3.)私の友人はjaasについて言及しましたが、よく説明する時間がありません。この技術を使用できますか?
ありがとう、
czetsuya
cdi - Weldで実行中の既存の会話をすべて取得するにはどうすればよいですか?
私はJBoss7.1.1.Final、Weld、Seam3でアプリケーションを作成しています。次のBeanがあります。
これで、ユーザーは複数の会話を作成でき、各会話はConversationBeanのインスタンスに関連付けられます。長時間の会話に関連するすべてのインスタンスを取得できる必要があります。
それらへのアクセスが必要な理由は、ユーザーが1つの記事を複数回開くと(したがって、同じ記事で複数の会話が作成されるため)です。彼が1つの会話で記事を変更した場合、他の会話で記事を更新できるようにしたいと思います。
これを行うための標準的な方法はありますか?
編集:「記事」インスタンスはentityManagerによって検索され、会話内で管理されます。エンティティマネージャは、Seam ManagedPersistenceContextを使用して取得されます。
java - 会話ごとにBeanを保存する方法
会話コンテキスト内にBeanを格納する方法はありますか?つまり、新しい会話ごとに、それに属する新しい個別のBeanが作成されます。
cdi - CDI会話スコープの伝播:一時的vs長期実行
溶接CDIドキュメントから:
会話コンテキストは、JSF Facesリクエスト(JSFフォーム送信)またはリダイレクトで自動的に伝播されます。リンクを介したナビゲーションなど、顔以外のリクエストでは自動的に伝播されません。
疑問に思っていたのですが、コンテキストはJSFに伝播し、一時的な会話の要求にも直面しますか?そして、より一般的には、一時的な会話と長時間の会話の間の伝播に関する違いのどこかに概要がありますか?
最初の質問に対する答えが「はい」であると仮定して、長時間の会話が必要になるユースケースを提供できますか?
jakarta-ee - プログラムによる会話検索
現在のインスタンスが、必要な会話に関連付けられたものを処理するために使用されているものであるCDI conversation
ことを知っているだけで、プログラムでインスタンスを取得することは可能ですか? そして、可能であればどのように?thread
CDI request
特に、私がやりたいことはこれです:
uof
ただし、 @Inject アノテーションを適用する代わりに、プログラムによるメカニズムを使用してインスタンス変数を初期化します (Client
とRoom
はエンティティであり、注入をサポートしていないため)。
私はすでに、次の静的メソッドによって取得されたa
を使用して を注入しようとしました:UnitOfWork
BeanManager
しかし、問題は、上記のメソッドによって与えられた Bean が新しいものであり (呼び出しごとに新しいインスタンスが与えられる)、それが必要でClient
ありRoom
、同じ会話スコープのUnitOfWork
.
java - struts2 の会話と検証
相互に依存するフォームを持つ struts2 プロジェクトに取り組んでいます。私は struts2-conversation を見つけ、その単純な例をステップ実行して、 ここまでの会話メカニズムを理解しました (何か間違っている場合は訂正してください)。
- コントローラーは struts.xml でマップされます
- シリアライズ可能な ConversationContext と Storage-Service を保持します
- ConversationContext は、命名規則によってフォームにマップされた POJO を保持します
今私の質問は、検証をどこに置くべきですか?
この構造では、コントローラーは ConversationSupport を拡張する 1 つのみであり、それによって、validate、prepare、および addField- & ActionError メソッドを提供する ActionSupport です。しかし、コントローラー内で検証することは、コンテキスト全体を検証することを意味し、実際には問題を解決しません。
上記のコンテキスト内で POJO 内のアノテーションを使用して検証を試みましたが、コンテキストがフラッシュされていないかのように NullPointerException が発生し、struts2 の xml 検証アプローチが硬すぎると思います。(ところで、生成されたJavaScriptを提供する前に縮小する方法は?そして、なぜそんなに多くのオプションがあるのですか?)
Mark の会話インターセプター アプローチでも同様の問題が発生しましたが、これは実際には得られなかった回避策です。多分あなたはそこで私を助けることができます。