JSF - t:saveState x @ConversationScope



关于在不使用会话的情况下临时保存JSF应用程序的状态:

另一种选择是使用Apache Tomahawk库的t:saveState;另一个最近的选择是使用CDI @ConversationScope。

t:saveState x @ConversationScope
每种方法的优点和缺点是什么?你会用哪一个,为什么?
关于内存消耗(在会话上消耗的空间和时间),@ConversationScope是否更好?

无状态JSF x t:saveState
在JSF 2.2中,将有可能实现无状态运行。由于组件树不再被持久化,所以t:saveState将无法工作。这对吗?!

我有一个从JSF 1.2迁移到JSF 2.x的应用程序。它有很多视图使用t:saveStave。
当前会话大小变得太大了。这主要是会话复制的问题。

是否值得将t:saveState替换为@ConversationScope?


更新:我们的大多数用例是流(像向导)。因此,@ViewScope不能被应用。

关于在不使用会话的情况下临时保存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你应该使用@javax.faces.view.ViewScoped,它与CDI 1.1兼容。

如果您打算使用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解决了这个问题。

更多信息:

  • 如何选择合适的bean scope?
  • JSF CDI:会话作用域bean[s]最佳实践

相关内容

  • 没有找到相关文章

最新更新