2010-07-28 40 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对话。此外,我不会说组件停止工作,他们仍然工作..这是你的逻辑,需要维护服务器上的某种状态。