2009-08-31 12 views
2

リンクにヒットすると、ウィンドウのポップアップが開きます。java.util.Listをロードするセッション管理Beanを持っています。そのリストをロードするのに数秒かかります。JSF並行性の問題

リンクを2回クリックすると、同時変更例外が発生します。ページがセッションモードにあり、最初の要求がまだリストをロードしているので、2番目の要求が終了する前にリストを更新しようとします。

私は手

1)に2つの可能な解決策が同期導入しているブロック

質問:同期ブロックを導入することマルチスレッド環境でのパフォーマンスの問題につながりますか?

2)JavaScriptをクリックするとJavaScriptが無効になります。

問題:ポップアップがロードされたらjavascriptの状態を復元する必要があるため、良い選択肢ではありません。ポップアップウィンドウが異常終了した場合、リンクが永久に無効になる可能性があります。

この問題の解決方法はありますか?

答えて

2

私はオプション1を選択したいと思います。セッション内の何か、またはセッションBean上で同期します。単一のサーバー環境では、これはかなり安全ですが、スティッキーセッションを使用していないクラスターでは、よりシングルトンの方を探す必要があります。

パフォーマンスは、特定のセッションBeanの各ユーザーセッションで同期されるため、パフォーマンスが低下することはありません。競合がない場合、コストは考慮する価値がありません。

1

POPUPウィンドウのモーダルウィンドウは、ポップアップが閉じられるまで親ウィンドウが にぼやけて表示されることを意味します。 JavaScriptコードを検索してください。

+0

Richfacesはすでにモーダルポップアップ(modalPanel)を提供しています。その他のライブラリは、そのようなコンポーネントを提供することもあります。 – romaintaz

+0

モーダルウィンドウは使用できません。 ;( – Madhu

0

2番目のオプションを選択します。

+0

)あなたが第2の選択肢を提案している理由は明らかではありません。 – Iravanchi

0

あなたが豊かな顔のa4jライブラリを使用し、ここでa4jをポップアップリンク

<a4j:commandButton id="popupLinkId" onlick="window.open("popupLink");return false;" reRender="popupLinkId" /> 

を再描画することができます豊富な顔を使用している場合は、JSF豊かな顔ライブラリのアヤックスです。詳細については、http://livedemo.exadel.com/richfaces-demo/richfaces/support.jsf;jsessionid=B9DFBAF3AFD62C96B94EEC67FC4645A5?c=support&tab=usageリンクを参照してください。