3

这个问题可能不符合 SO 规则,但我还是会问。答案可能会帮助其他在 JSF 中苦苦挣扎的人。


我们在两年来最大的项目之一中使用 JSF(MyFaces、PrettyFaces、PrimeFaces 和 Spring)(从 Tapestry 3 迁移而来)。我可以说我们正在从这次迁移中“恢复”到今天。

在我看来,我们的主要错误之一是对 JSF 的 VIEW SCOPE 的误解。JSF 提供了两种基本机制来持久化 VIEW STATE - CLIENT 和 SERVER。我们选择了 SERVER 方法,这是我们的第一个错误,ViewExpiredException因为从那一刻起就从未停止过。下一个错误是将数据存储在 VIEW SCOPE 上,因为这使我们无法轻松切换到 CLIENT 状态保存方法。

所以我在想是否有一些最佳实践和指导方针,哪些应该和不应该存储在 VIEW SCOPE 上(并因此序列化到 VIEW STATE)。官方文档和规范没有提供。但我得出了一个很好的结论:

  • 您应该只在 VIEW SCOPE 上存储您通常(没有 JSF)作为请求参数传递的信息。

当你有一个没有 JSF 的基本 CRUD 应用程序时,你会这样做:

  • 通过 POST 参数中的表单值在请求之间保留表单的状态
  • 通过查询参数在请求之间保留列表的状态(过滤、排序、分页)

我的结论正确吗?您对在 VIEW SCOPE 中存储什么以及从不存储什么有任何其他指导方针吗?是否有任何组件框架有这样的指导方针?

4

1 回答 1

-2

我使用以下准则:

  • 避免使用 VIEW SCOPE,因为它仅适用于 Faces Manages Beans。
  • 更好:避免使用 Faces Managed Backing Beans。使用 CDI 托管支持 Bean 来确保可移植性。(当然,这只有在您有任何可用的 cdi 容器时才有可能......在 Java EE 6 和更新版本中......)
  • 避免使用 JSF 进行 AJAX。(或者只在简单的 UI 上谨慎使用它......)
于 2015-03-05T22:26:53.963 回答