JSF - t:saveState x @ConversationScope

时间:2014-05-16 18:25:06

标签: java jsf jsf-2 tomahawk conversation-scope

关于临时保存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无法应用。

1 个答案:

答案 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解决了这个问题。

更多信息: