JSFの会話?CID-誰かがページをブックマークするときの正しい混乱?

StackOverflow https://stackoverflow.com/questions/7817936

  •  26-10-2019
  •  | 
  •  

質問

JBOSS AS7で作業し、会話範囲を使用してブラウザタブ内でユーザーのインタラクションを管理します。

私のページが取得されることに注意してください?CIDパラメーターは追加されました。これは素晴らしいことです - ユーザーがページをブックマークするまでページに戻ろうとするまで!会話フィルターは「そのような会話なし」メッセージを提供します。

会話を管理するより良い方法はありますか?おそらく、Hidden Fieldsを使用するための実装またはスイッチ(Ajaxで適切な注意を払って)?または、会話の例外を傍受したり、フィルターを変更したりする必要があります。

ありがとう - リチャード

さらに遠く:

私は他の目的のためにbeforerestoreviewイベントを傍受しています(主にログイン処理)。あなたはこれがうまくいくと思うでしょう:

/**
 * @return true if there is no valid Conversation context.
 */
private boolean conversationNotActive()
{
    Context conversationContext = m_beanManager.getContext(ConversationScoped.class);
    return !conversationContext.isActive();
}

しかし、コンテキストにアクティブかどうかを尋ねることができません!とりあえずトライキャッチを投入します。

役に立ちましたか?

解決

今、私たちは2つのプロングされたアプローチを取っています。

非常に複雑な会話マネージャーが悪い会話IDを検出し、適切なアクションを実行します。現在、復元ビューイベントに応答しています。早めに移動したいのですが、この段階でビューIDの導出に問題があります。イベントをCDIに渡すために、JSFをCDIブリッジに書きました。縫い目も同じことをしますが、私たちにとってはヘビー級があまりにも証明されました。

通常の場合、CONVERCENT MANAGERは、CIDパラメーターなしで自己にリダイレクトして、新しい会話を開始します。ポストバックの場合、HTTP 410エラーを返します。死んだ会話の検出は上記のとおりです。会話を作成するときに、よりランダムな会話IDを使用して、IDが再利用された場合に衝突を防ぐことを試みることができます。

会話マネージャーは、ページについて保持するメタデータに応じて会話を開始します。 (すべてのページの下 /フォーム /アプリケーションで会話が必要です)。これを行うとリダイレクトを使用して、CIDパラメーターが必要な場所にあることを確認します。 RestoreViewフェーズの前にフォームIDを取得する問題を解決できる場合、これは不要になる可能性があります。

ブラウザ履歴APIを使用して、ユーザーのブラウザURLウィンドウからCIDを削除します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top