这个问题可能不符合 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 中存储什么以及从不存储什么有任何其他指导方针吗?是否有任何组件框架有这样的指导方针?