問題タブ [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.
java - StripesFrameworkの会話スコープ
私は現在、StripesFrameworkの使用に固執しています。
私は何年もそれを使用していません、そして私は他のフレームワークの機能に慣れてきました。私が見逃していることの1つは、会話(またはブラウザーウィンドウ)スコープです。Stripesでそれを実装する方法はありますか?
java-ee-6 - @ConversationScoped メソッドによる EntityManager の提供
Maven archetype groupId: org.fluttercode.knappsack 、artifactID: jee6-sandbox-archetype によって生成された単純な JEE6 アプリケーションを JBoss7 で実行しようとしました。(このチュリアルを経験しました、すみません、ドイツ語で)
ただし、ウェルカム JSF を呼び出すと、次のエラー メッセージが表示されます。
実際、EntityManager インスタンスを返すことになっている DataRepositoyProducer クラスは、次のように注釈付きで定義されています。
@RequestScoped を使用すると、アプリケーションは約束どおりに実行されます。このチュートリアルを行った他の人がこの問題を経験しなかったのはなぜでしょうか? そして、それを適切に修正する方法(@RequestScopedを使用すると、ユーザーリクエストごとにBeanが再作成されることになりますよね?これはあまり効率的ではないと思います)
公式の JEE6 チュートリアルでは、「セッション、アプリケーション、または会話スコープを使用する Bean はシリアライズ可能である必要がありますが、リクエスト スコープを使用する Bean はシリアライズ可能である必要はありません」と述べています。ただし、サーバーはシリアル化できない Bean について不平を言っているのではなく、プロデューサー Bean の製品であるため、ここでは問題ではないようです。
jsf - JSF 2 ConversationScope はどのように機能しますか?
表示しているページに応じてデータのテーブルを表示する JSF facelets ページがあります。ページ 1 を表示するときに、view()
アクション メソッドを呼び出してデータベースから両方のページのデータを取得し、Bean のプライベート メンバー フィールド (2 つの配列) として格納します。conversation.start()
また、メソッドに挿入された会話インスタンスを呼び出しますview()
。
ユーザーが「次へ」ボタン ( h:commandButton
) をクリックしてページ 2 に移動するとnext()
、配列 2 を指すようにバッキング Bean を更新するメソッドを実行して、その内容を出力します。問題は、配列 2 が存在しないことです。会話の範囲を失っている理由がわかりません。何か案は?
java-ee-6 - CDI で始まる会話を観察 (または傍受) する方法は?
Conversation.begin()
新しいものをストックしConversation.getId()
、開いているすべての会話をリストするために、CDI でメソッド呼び出しを監視または傍受したいと思います。
仕様( JSR-299)でそのようなイベントを観察する方法が見つかりません。おそらくまたはその他のイベントを使用してそれを行う複雑な拡張システムを考えています...しかし、別のより単純なソリューションが存在するように感じます...ProcessInjectionTarget
ProcessProducer
java - フォーム送信時に会話が自動的に伝播されませんか?
次の会話スコープのバッキング Bean があります。
そして、次の facelets ビュー:
ページに入ると、INFO: Creating TestConversation bean!!!
どちらが正しいかがわかります。
しかし、次に をクリックするh:commandLink
と、次のように表示されます。
情報: TestConversation Bean を作成しています!!!
情報: commandLinkAction を呼び出しています
Bean が再度作成されました。これは、会話が伝搬されなかったことを意味します。これは次のことと矛盾すると思います。
ドキュメントからの引用:
JSF ビューをレンダリングするリクエストに関連付けられた長時間の会話コンテキストは、そのレンダリングされたページから発生するすべての Faces リクエスト (JSF フォーム送信) に自動的に伝播されます。
これを追加すると<f:param name="cid" value="#{javax.enterprise.context.conversation.id}"/>
、すべて正常に動作します。誤解がありますか?
PSなしでは、2回目f:param
にクリックすると正常に動作しますがcommandLink
、初めては動作しません:(。
java - 会話スコープは、ビュー スコープの適切な代替物ですか?
JSF 2.0 では、ビュー スコープの最も明白な使用例は、潜在的に複数の AJAX ポストバックを含む単一のページです。JSF マネージド Bean の代わりに CDI を使用すると、ビュー スコープがなくなるため、独自に実装するか、(おそらくバグが多い) サード パーティの実装を使用するか、会話スコープを使用する必要があります。
私の質問: 会話スコープは、典型的な AJAX の状況でビュー スコープに代わる価値のあるものですか? ビュー スコープと同様に、セッションごとに複数のインスタンスを許可しますか? 落とし穴は何ですか?
ユーザーがページから離れたときに会話スコープが自動的に削除されず、タイムアウト後に削除されるという落とし穴の 1 つを認識しています。しかし、会話がタイムアウトする前にユーザーがそのページに戻るとどうなるかはわかりません。
アップデート
会話スコープは、セッションごとに複数のインスタンスを実際にサポートしています。この本には多くのことが記載されており、ch のコードを使用してこれを確認できました。2.
jsf-2 - アクションを呼び出し、cid を保持しないリンクまたはボタンを作成するには?
これは、私が実現できていない単純なユースケースです。サーバー メソッド (アクション) を呼び出し、cid
パラメーターを保持せずにページにリダイレクトするリンクまたはボタンを作成したいと考えています。
JSF2、JBoss 7、および Seam 3 を使用しています。
以下に、私が試した 2 つの方法を示しますが、成功しませんでした。
最初のものは、h:commandLink
ここでidentity.logout()
は が呼び出されますが、ブラウザは にリダイレクトされるためpages/home.xhtml?cid=1
、再度ログインすると、
エラー。
二つ目、h:link
ここではcid
、生成されたハイパーリンクには何もありませんが、メソッドidentity.logout()
は呼び出されません...
誰かがアイデアを持っていますか?
jsf-2 - SelectBooleanCheckbox のレンダリング状態がバッキング Bean と一致しない
私は JSF2.0 を使用しており、ウィザードを構築しています。SelectBooleanCheckboxes で問題が発生しました。ワークフローは次のとおりです。
- チェックボックスを含むページをロードします (値はバッキング Bean の SortedMap にバインドされます)。
- それらにチェックを入れて、[次へ] をクリックします。これにより、どの PanelGroup をロードするかを決定するためにページが使用するカーソルがインクリメントされます。
- (正しい) 値が Bean に保持されます。
- クリックバック (カーソルがデクリメント) すると、編集可能なチェックボックスがページに表示されます。最初のチェックボックスはチェックされていません (バインドされた変数がそのボックスに対して true の値を保持している場合でも)。
このカーソルベースのアプローチ (すべてのウィザード画面を含む) は機能していないようです。ただし、これを少し変更して、前/次のボタンが別の xhtml ページを表示するようにすると、この問題はなくなります。
残念ながら、私はこれを行うことができません。このウィザードをモーダル ダイアログにプラグインするので、前/次の新しいページにアクセスしても機能しません。
私はこれの小さな例を書き上げました (ウィザード全体を通り抜けるように頼むのではなく)。
Java クラスは次のとおりです。
XHTML フラグメントは次のとおりです。
どんな提案も大歓迎です!(これが二重の投稿である場合は申し訳ありません。ここで検索している間、同様のものを発見できませんでした)
jsf - Weld + JSF 2.0 @ConversationScoped は状態を保持しません
JBoss AS 7 で、JSF 2.0 アプリケーション内で、CDI の実装 Weld を使用しようとしています。
実際には、@ConversationSconed @Named Bean は、会話を開始したときに状態を維持していないようです。
それを確認するために、Primefaces と ajax を使用して、コマンド ボタンをクリックするたびにインクリメントするカウンターを使用しています。
beans.xml はクラスパス (META-INF、WEB-INF ...) に存在し、@SessionScoped Bean または @ManagedBean @ViewScoped で正確に動作するようにしたいだけです。
しかし、@ManagedBean を使用するよりも、@ConversationScoped を使用して @Named Bean を使用することを好みます。
JBoss AS 7 または web.xml で追加の設定を行う必要があるかもしれませんが、わかりません...
これが私の @ConversationScoped Bean です:
そして、ここに私のxhtmlページのコンテンツがあります:
私は何を間違っていますか?私は何かを忘れていますか?
ご回答ありがとうございます。