如何选择合适的bean范围?

时间:2011-08-11 19:44:34

标签: jsf jsf-2 scope managed-bean

我注意到有不同的bean范围,如:

@RequestScoped
@ViewScoped
@FlowScoped
@SessionScoped
@ApplicationScoped

每个人的目的是什么?如何为我的bean选择合适的范围?

2 个答案:

答案 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] enter image description here