2010-07-28 38 views
0

我注意到,當使用像Richfaces這樣的Ajax重JSF 1.2實現時,您不得不聲明更多的託管bean,因爲Session的作用域使得狀態可以跨越多個Ajax請求;有些組件會停止工作。支持Ajax的不必要的會話Bean啓用JSF框架

例如,我最近開發了這個應用程序,其中我必須將幾乎所有的JSF Backing Beans都聲明爲Session Scoped才能使組件「x」正常工作。有沒有辦法解決這個問題,你認爲這是一個糟糕的做法,或者只是在JSF 1.2中使用支持Ajax的組件支付的代價。

在此先感謝。

回答

2

會話作用域bean會增加內存使用量。

另一個可用的作用域是查看範圍 - 這允許在請求之間保持bean的狀態,而用戶仍處於同一視圖中。

如果您正在使用JSF2,請考慮使用@ViewScope bean的名稱上面:

@ViewScope 
    public class myBean{ 
    .. 
    } 

如果您使用RichFaces和JSF1.2,考慮在視圖中使用<a4j:keepAlive /><f:view>下。例如:

<a4j:keepAlive beanName = "#{myBean}"/> 

更多信息here

+0

+1,只要記住bean必須是可序列化的 – Bozho 2010-07-29 10:03:57

0

另一種選擇是使用Seam對話。此外,我不會說組件停止工作,他們仍然工作..這是你的邏輯,需要維護服務器上的某種狀態。