JSF2.0中的managed bean生命周期

转载 2016年08月28日 15:56:18

我们为什么要讨论managed bean的生命周期呢?

原因在于JSF2.0中的data即数据,都是从managed bean中取出来和放进去的。

 

managed bean的生命周期即此bean可以生存多久,bean上的数据可以保存多久。

 

关于数据保存有两种方式

一,控制 managed bean的生命周期,使bean活着,数据不丢失。

二,是每次提交数据 和 事件listener被触发的时候,表单<h:form></h:form>中的数据都会提交到bean生成managed bean

这样给人一种错觉,好像之前的bean还活着因为数据还在呀!其实不然,是new了新的bean只不过数据被重新注入了,给人的错觉就像还在使用原来的bean一样。你可以看到没有被<h:form></h:form>包括的范围内的bean的数据,bean的数据都初始化了。

 

这也是@ViewScoped诞生的原因,当然你也可以通过 把需要的数据全都放到<h:form></h:form>中来替@ViewScoped


@RequestScoped(默认生命周期)

为每一次request请求,new一个实体

 

在实际应用中此周期也为form中的input进行初始化。即:他会被实例化两次1,表单form被展现时。2,表单被提交时

 

其实可以简单的理解为它生存在 request域里。我发现 commandButton是forword不是redirect的。地址栏没有发生变化。

比如在a.jsf 提交表单地址栏不会变但是页面是b的页面,如果此时又要提交表单 action 就会到下一个页面c,但是地址栏是b的。

 

是意味着本表单页面的bean如果是requestScope则下个页面也会取到,地址栏没变就意味着没有重定向,没有销毁request。

 

@SessionScoped

顾名思义就是和session一样的生命周期,不过注意此时managed bean必须被序列化implements Serializable

 

@ApplicationScoped

不想多说,注意两点1,数据安全,即不想被公布的数据不要放入此域。2,注意线程同步的问题(因为可能会有很多用户同时操作)。

 

@ViewScoped(jsf2.0新增的域)

官方解释是:同一用户,相同的页面,相同的bean数据。即我的view视图没变我的bean就在。同样需要被序列化implements Serializable

常应用于 event handlers 或者 ajax中。每次even发生被捕获了,的确是刷新了页面,但是在默认scoped情况下数据也被保留了下来,ajax更不用说了,我真的不知道viewScoped到底有什么用。

哦!我发现原因了,

jsf2.0有两种listeners。

1,actionListener ,(buttons,hypertext links,image maps)

自动提交表单

2,valueChangeListener,(radio button,comboboxe,list boxes,checkboxes,textfields)

onclick="submit()" 或者onchange="submit()"才可以提交form

关于属性immediate的作用还是不太清楚。好像是跳过验证直接提交。

(关于此处的疑问已于下一章“JSF2.0中的managed bean生命周期(补充)”中得到初步理解解决)                                                                                                                              

 

@CustomScoped(value="#{someMap}")   (jsf2.0新增的域)

bean被存在Map,由程序来控制其生命周期

 

@NoneScoped

不存放在域中,即不可被JSF el直接访问。此时bean只是作为其它bean的一部分,被注入对象。

JSF2.0中的managed bean生命周期

对JSF2的托管Bean几种托管周期的总结,比较简洁,转一份放这儿参考。类似此类问题,只有结合实际例子分析才好理解。 转自 http://blog.csdn.net/suncaishen...
  • haveaway
  • haveaway
  • 2015年01月23日 11:19
  • 302

Spring Bean生命周期详解

Spring Bean生命周期详解
  • a327369238
  • a327369238
  • 2016年08月12日 17:40
  • 7985

Spring Bean的生命周期(非常详细)

Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring...
  • u011686226
  • u011686226
  • 2016年10月08日 17:17
  • 1041

Spring核心技术(六)——Spring中Bean的生命周期

前文已经描述了Bean的作用域,本文将描述Bean的一些生命周期作用,配置还有Bean的继承。定制Bean生命周期回调开发者通过实现Spring的InitializeingBean和Disposabl...
  • EthanWhite
  • EthanWhite
  • 2016年05月29日 18:44
  • 18461

spring中Bean的生命周期总结

spring中在ApplicationContext或在BeanFactory中Bean的生命周期总结  Spring中Bean的生命周期,在学习spring的过程中bean的生命周期理解对学习sp...
  • chrp99
  • chrp99
  • 2013年05月13日 07:51
  • 3850

Java面试之Spring的bean的生命周期

一、Bean的定义 Spring通常通过配置文件定义Bean。如: xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:sch...
  • xzw_123
  • xzw_123
  • 2015年04月08日 09:52
  • 1570

Spring Bean的生命周期(非常详细)

http://www.cnblogs.com/zrtqsk/p/3735273.html spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解S...
  • u010342038
  • u010342038
  • 2016年10月11日 15:45
  • 812

Spring - IOC创建对象的时机,创建Bean的Scope 及其 IOC的 生命周期

一. Spring容器创建Bean的Scope     spring容器创建bean的scope : 验证创建的对象是单例的还是多例的? 1. 由spring产生的bean默认是单例的; 2. 在sp...
  • LABLENET
  • LABLENET
  • 2015年12月25日 17:04
  • 1632

Spring4的知识应用总结(四)——Bean的生命周期和注解方式配置

Bean的生命周期和注解方式配置 一、Bean的生命周期         Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的...
  • qq_25814003
  • qq_25814003
  • 2016年12月25日 22:42
  • 950

Spring管理的Bean的生命周期

bean的初始化时机前面讲解了Spring容器管理的bean的作用域。接着我们就要思考一个问题:bean到底是在什么时候才进行实例化的呢?我们以这个问题为引子来展开本文的说明。 bean对象无外乎是...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年10月16日 23:00
  • 2284
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSF2.0中的managed bean生命周期
举报原因:
原因补充:

(最多只允许输入30个字)