【问题标题】:Unnecessary Session Beans in Ajax Enabled JSF Frameworks启用 Ajax 的 JSF 框架中不必要的会话 Bean
【发布时间】:2011-03-21 22:00:08
【问题描述】:
我注意到,当使用像 Richfaces 这样的 Ajax 繁重的 JSF 1.2 实现时,不知何故,您不得不声明比您想要的更多的托管 bean,因为 Session 作用域,以便可以跨多个 Ajax 请求维护状态;有些组件将停止工作。
例如,我最近开发了这个应用程序,我必须将几乎所有的 JSF 支持 Bean 声明为 Session Scoped 以使组件“x”工作。有没有办法解决这个问题,您认为这是一种不好的做法,还是仅仅是在 JSF 1.2 中启用 Ajax 组件所付出的代价。
提前致谢。
【问题讨论】:
标签:
jsf
richfaces
session-state
【解决方案1】:
会话范围 bean 会增加内存使用量。
另一个可用的范围是 View Scope - 这允许在请求之间保持 bean 的状态,而用户仍然在同一个视图上。
如果您使用的是 JSF2,请考虑在 bean 名称上方使用@ViewScope:
@ViewScope
public class myBean{
..
}
如果您使用 RichFaces 和 JSF1.2,请考虑在视图中的 <f:view> 下使用 <a4j:keepAlive />。例如:
<a4j:keepAlive beanName = "#{myBean}"/>
阅读更多信息here
【解决方案2】:
另一种选择是使用 Seam 对话。另外,我不会说组件停止工作,它们仍然工作......这是您的逻辑需要在服务器上维护某种状态。