2009-08-31 68 views
2

當我點擊一個鏈接時,會彈出一個窗口彈出窗口。我有一個會話託管bean加載java.util.List.It需要幾秒鐘來加載該列表。JSF併發問題

當我點擊鏈接兩次我得到併發修改異常。因爲頁面處於會話模式,並且第一個請求仍在加載列表,所以在第二個請求嘗試更新列表之前。

我手上

1)兩種可能的解決方案引入synchronized塊

問:介紹synchronized塊會導致性能問題,在多線程環境中?

2)javascript一旦點擊就禁用鏈接。

問題:不是一個好的選擇,因爲我們需要在彈出窗口加載後恢復javascript的狀態。如果彈出窗口異常終止,鏈接可能會永久停用。

這個問題還有其他解決方案嗎?

回答

2

我會選擇選項1.同步會話中的某些內容或它自己的會話bean。在單一服務器環境中,這應該是非常安全的,但在不使用粘性會話的羣集中,您將不得不尋找更好的單身人士。

性能不應該受到影響,因爲您將針對該特定會話bean的每個用戶會話進行同步,並且如果沒有爭用,則成本不值得考慮。

1

一個替代解決方案是使POPUP窗口模態窗口意味着父窗口將 模糊/蓋過,直到彈出窗口關閉。 搜索JavaScript代碼。

+0

Richfaces已經提供了一個模態彈出窗口(模式面板)。其他館藏也可能提供這樣的組件。 – romaintaz 2009-08-31 08:49:33

+0

我不允許使用模態窗口。 ;( – Madhu 2009-08-31 09:13:09

0

選擇第二個選項。

+0

)描述這個選擇會是一個更好的選擇!爲什麼你建議第二個選項並不是顯而易見的。 – Iravanchi 2010-06-28 08:27:24