我注意到有不同的bean范围,如:
@RequestScoped
@ViewScoped
@FlowScoped
@SessionScoped
@ApplicationScoped
每个人的目的是什么?如何为我的bean选择合适的范围?
答案 0 :(得分:461)
答案 1 :(得分:120)
从JSF 2.x开始,有4个Bean范围:
- @SessionScoped
- @RequestScoped
- @ApplicationScoped
- @ViewScoped
会话范围:会话范围从建立会话到会话终止之间一直存在。会话终止 如果Web应用程序调用了invalidate方法 HttpSession对象,或者它是否超时。
RequestScope:请求范围是短暂的。它在提交HTTP请求时启动,在响应发回后结束 给客户。如果将托管bean放入请求范围,则为新的 每个请求都会创建一个实例。值得考虑的是请求 范围如果您担心会话范围存储的成本。
ApplicationScope:应用程序范围在Web应用程序的整个持续时间内保持不变。这个范围在所有人之间共享 请求和所有会话。您将托管bean放入 应用程序范围,如果单个bean应该在所有bean之间共享 Web应用程序的实例。 bean就是这样建造的 该应用程序的任何用户首先请求它,它仍然存在 直到从应用程序服务器中删除Web应用程序。
ViewScope:在JSF 2.0中添加了查看范围。视图范围中的bean在重新显示相同的JSF页面时仍然存在。 (JSF 规范使用术语视图作为JSF页面。)一旦用户 导航到另一个页面,bean超出了范围。
根据您的要求选择范围。
来源: Core Java Server Faces 3rd Edition作者David Geary& Cay Horstmann [页码51 - 54]