关于临时保存JSF应用程序的状态,而不使用会话:
另一种方法是使用Apache Tomahawk库的t:saveState;另一个更新的替代方案是使用CDI @ConversationScope。
t:saveState x @ConversationScope
每个人的优势和陷阱是什么?你会使用哪一个?为什么?
关于内存消耗(会话消耗的空间和时间),@ ConversScope无论如何更好吗?
无状态JSF x t:saveState
在JSF 2.2上,将有可能运行无状态。由于组件树不再存在,t:saveState不能工作。这是正确的吗?!
我有一个从JSF 1.2迁移到JSF 2.x的应用程序。它有很多使用t:saveStave的视图 目前会话规模过大。这是一个主要是会话复制的问题。
是否值得将t:saveState替换为@ConversationScope?
更新:大多数用例都是流程(如向导)。因此,@ ViewScope无法应用。
答案 0 :(得分:3)
关于临时保存JSF应用程序的状态,而不使用会话:
另一种方法是使用Apache Tomahawk库的t:saveState;另一个更新的替代方案是使用CDI @ConversationScope
<t:saveState>
来自旧的JSF 1.x次,它的使用应该保留给那些应用程序。 @ConversationScope
来自CDI 1.0,用于沿着多个请求延长JSF bean和组件的状态,并使用传递请求的标识符。
使用JSF 2时的最佳选择是@javax.faces.bean.ViewScoped
,因为JSF 2.2你应该使用与CDI 1.1兼容的@javax.faces.view.ViewScoped
。
如果您要使用JSF 2.0.x或2.1.x以及CDI 1.0,那么您将无法使用@ViewScoped
。为了解决这个问题,有第三方库允许CDI管理的JSF bean的视图范围。
是否值得将t:saveState替换为@ConversationScope?
由于您要迁移到JSF 2.x,因此必须完全放弃 <t:saveState>
的使用。根据JSF 2.x版本,您应该使用@ViewScope
或其替代方案。我不建议使用@ConversationScope
,除非您希望/需要通过几个视图保持bean活动,例如实现流时,但JSF 2.2也使用@FlowScoped
解决了这个问题。
更多信息: