0

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

另一种方法是使用 Apache Tomahawk 库的 t:saveState;另一种较新的选择是使用 CDI @ConversationScope。

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

无状态 JSF xt:saveState
在 JSF 2.2 上会有无状态运行的可能性。由于不再保留组件树,因此 t:saveState 将不起作用。这是对的吗?!

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

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


更新:大多数用例都是流程(如向导)。因此,@ViewScope 无法应用。

4

1 回答 1

4

关于在不使用会话的情况下临时保存 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,因此您必须完全放弃使用 of <t:saveState>。根据 JSF 2.x 版本,您应该使用@ViewScope或替代它。我不建议使用@ConversationScope,除非您希望/需要通过多个视图保持 bean 处于活动状态,例如在实现流时,但 JSF 2.2 也通过使用@FlowScoped.

更多信息:

于 2014-05-16T20:23:05.360 回答