2011-12-09 104 views
1

我有一些menulinks,每個menulinks都與會話bean相關聯。由於bean在會話中,當我在不同的菜單鏈接之間移動時,這些值將被保留。例如,假設有2個菜單鏈接 - 客戶簡介和帳戶詳細信息。在客戶檔案中,可以通過輸入名字和姓氏來搜索客戶的詳細信息。在帳戶詳細信息頁面中,可以通過輸入客戶帳號來獲取客戶帳戶的詳細信息。在這種情況下,當用戶輸入無效帳號時,將顯示驗證錯誤,並且用戶輸入的客戶帳號將保留在屏幕上。當用戶導航到客戶資料鏈接並返回到賬戶詳細信息屏幕時,先前輸入的賬戶號將顯示爲會話範圍。JSF - 在會話範圍中清除託管bean中的值

處理這個問題的最佳方法是什麼?

  1. 我能在PhaseListenerbeforePhase一些代碼,以從會話中刪除bean時用戶導航到不同的菜單鏈接?
  2. 我應該有什麼樣的初始化塊可以調用來清理會話bean中的變量,每次點擊相關的菜單鏈接?

有沒有處理這種情況的最佳實踐?

回答

2

您不應將請求或視圖範圍數據存儲在會話範圍的bean中。相反,將bean放入請求或查看範圍中。新的JSF2視圖範圍可以通過在視圖中添加一個引用請求範圍bean的<a4j:keepAlive>在RichFaces的JSF1中實現。

+0

Hi BalusC,整個應用程序都有會話範圍的bean。它會涉及很多努力使用使其查看範圍?該應用程序目前不使用大量的ajax功能。應用程序是否使用ajax相關標籤來將其轉換爲視圖範圍? –

+0

那麼,如果應用程序從一開始就設計的很差,我就忍不住了。不,Ajax功能不是強制性的。 – BalusC

+0

感謝BalusC - 一如既往的非常有價值的提示。什麼時候應該在會話範圍中使用託管的bean。有沒有例子? –

1

我們正在使用選項2,即當我們點擊相應的鏈接時,託管bean被「重置」。

但是,您可能希望查看Seam Faces,因爲它引入了一些可能提供您所需內容的範圍(例如對話範圍)。

+0

謝謝托馬斯。我們主要使用Rich Faces。將研究Seam Faces提供的選項。去選項1是不好的做法嗎?選項1是否存在任何問題。 –

+1

@ user1042646嗯,我沒有檢查,但你可能必須通過會話中的所有bean,這可能是矯枉過正。此外,您可能會檢查用戶當前正在瀏覽的上下文,因爲您不希望在用戶瀏覽器帳戶詳細信息等時清除值。如果在這種上下文中沒有瀏覽內容,則可以考慮將這些值放入請求中有限的bean。 – Thomas

+0

在這種情況下,我正在做的是,我爲每個menulinks添加了一個屬性「menuLink」。在phaseListener中,我檢查menuLink屬性並從會話中刪除特定的bean。當我處於對話中時,該值不會被刪除,因爲該參數不會被傳遞。在表單重置的情況下,應該在哪裏調用表單重置方法?它是否也應該在phaselistener中? –