JSF的生命周期--ADF Faces入门(文档阅读)

原创 2011年01月20日 15:21:00

 由于ADF Faces是基于JSF框架扩展出来的,因此任何使用ADF 创建的应用都会使用到标准的JSF页面请求生命周期,与此同时ADF Faces还提供了额外的功能,例如client-side value lifecycle, 一个允许你可以在页面中创建可提交的region的subform组件,就避免了在单个页面以及额外的范围中使用多个forms的劣势。为了更好的理解RCF的生命周期,最好先去好好了解下标准的JSF生命周期。

当一个JSF页面被提交和一个新的页面被请求的时候,JSF的请求生命周期会被调用。生命周期会处理页面所提交的值,验证当前页的组件,导航到结果页及显示结果页的组件,除此之外,同时还保存及恢复了状态。JSF生命周期使用UI组件树去管理faces组件的显示。这树就是运行时一个JSF页面的表现:每个UI组件都会相对应到组件树中的一个UI组件实例。在JSF应用中,页面请求生命周期被FacesServlet管理着。FacesServlet对象创建一个叫FacesContext的对象,FacesContext包括了请求过程中的必须信息并且会调用一个对象执行生命周期。下图为JSF中的一个页面请求的生命周期,如图中,事件都会在每一个阶段的前后进行处理。

Restore View:创建组件树阶段。如果这不是初始化渲染,也就是说如果页面被提交回去给服务器的话,组件树会以恰当的状态恢复。另一种情况,如果是初始化渲染,组件树会被创建,与此同时,生命周期会跳转到Render Response phase.

Apply Request Values:每一个组件树上的组件都会通过它的decode方法从请求参数中提取新的值并且在本地存储这些值。大部分相关事件这时候都会排成队列等候处理。如果一个组件的immediate属性被设置为true,这时候针对这个组件的验证,转换以及相关事件会在这个阶段进行处理。

Process Validations:本地的值会被从输入类型转换到强调的数据类型。如果转换失败的话,这个阶段仍然会继续到完成(所有余下的转换器,验证器,以及必要的检查都会运行),但是这步完成之后,生命周期会跳转到Render Response phase。如果没有失败的话,组件的必须属性会被检验。如果值为true,并且相关区域包含了值,则相关的验证器这时候会跑起来。如果必须值为true,并且相关区域没有值的话,这步也完成了(所有余下的转换器会被执行),但是生命周期会跳转到Render Response phase。如果必须值为false,尽管没有任何值,这步会直接完成,这种情况下没有任何验证器会被执行。在这一步的最后阶段,本地数据值的转换版本会被设置,任何验证以及转换信息会以队列形式存储在FacesContext对象中,而且任何值的改变事件都会被交付。总而言之,对于一个可编辑的输入框来说,Process Validations的流程如下:

1。如果转换失败,必须验证以及验证器就不会执行。

2。如果转换失败而且必须验证检查失败,验证器也不会执行。

3。如果转换和必须验证都成功了,所有的验证器都会执行。即使多个验证器中的其中一个执行失败,但是余下的验证器也会全部执行完。这是因为当用户察觉了错误以后,你应该尽可能的反馈错误信息给用户,让他们知道他所输入的数据错在何处。

Update Model Values:组件的验证本地值会被转移到model中,并且本地的备份会被丢弃。

Invoke Application:应用级逻辑被执行,例如事件处理。

Render Response:组件树上的组件被渲染了。状态信息会为子顺序的请求以及Restore View阶段存储起来。

例子:

将页面run起来,这时候我们输入"June 25, 2005",然后点击按钮。以下为生命周期的传值过程。

Restore View----》Apply Request Values--按钮中的ActionEvent入列,"June 25, 2005",作为输入数据保存起来----》

Process Validations---转换器会将输入字符串转换为日期类型,转换后的日期对象会被存储在本地。此时localValueSet属性被设置为true并且submitedValue属性被设置为null。valueChangeListener进入队列。如果提交的值是不合法的,转换器会抛出异常并且放置一个消息到队列中。这个组件仍然会与原来的值绑定。生命周期这时候会跳转到最后一步,即Render Response,并且不正确的值会被渲染。--事件处理  输入框的valueChangeListner会被调用--》Update Model Values----输入的日期会被传到model,这时,localValueSet的值会被设置为false并且localValue属性会被设置为空。---》Invoke Application---事件处理 按钮的actionListner触发--》Render Response---组件的值是通过调用getValue方法获取的,用EL表达式:#{myBean.date}并且从model返回日期。转换器是使用getAsString获取到日期值的,同时转换为字符串。如果输入的值转换或者验证失败,submitedValue会代替原来的值显示出来。

相关文章推荐

jsf生命周期学习文档

  • 2010年04月13日 10:23
  • 385KB
  • 下载

在客户端访问组件属性----ADF Faces入门(文档阅读)

在客户端访问组件属性     对于每个内置的组件属性,组件类种的便捷的访问 方法都是有效的。例如,你可以在客户端使用使用getValue() ,获取到的值和服务器端使用这个方法是一样的。在ADF Fa...
  • com_d_d
  • com_d_d
  • 2011年01月19日 19:30
  • 932

监听客户端事件----ADF Faces入门(文档阅读)

如何监听客户端事件:在传统的JSF应用中,如果你想处理客户端的事件,你必须去监听DOM级别的事件。然而,这些事件都不以一种简易的方式进行交付。ADF Faces客户端事件监听模型类似于JSF的,但是它...
  • com_d_d
  • com_d_d
  • 2011年01月18日 22:13
  • 1040

Render和visible----------ADF Faces入门(文档阅读)

   所有的ADF Faces显示组件组件都会有两个属性用来控制这个组件是否显示在页面中让用户瞧见,这两哥们就是rendered 和visible。那咱们来看看它哥两各自的特点。rendered属性有...
  • com_d_d
  • com_d_d
  • 2011年01月19日 21:05
  • 1258

国际化及本地化页面---------ADF Faces入门(文档阅读)

主要介绍了如何去配置JSF页面,应用去以适合的语言显示在用户的浏览器中。   首先说下国际化以及本地化,国际化是设计和开发产品为了方便适应当地特定的语言和文化的过程,而本地化是通过翻译文字以及添加特定...
  • com_d_d
  • com_d_d
  • 2011年01月29日 01:04
  • 1351

关于Immediate属性的使用(注意)----ADF Faces入门(文档阅读)

Immediate属性是个神秘而又好用的东西。下列简称为I你可以使用I去在生命周期的Apply Request Values阶段使对组件的访问升级。当actionSource组件被设置为I的时候,事件...
  • com_d_d
  • com_d_d
  • 2011年01月21日 01:53
  • 1622

实例化客户端组件----ADF Faces入门(文档阅读)

实例化客户端组件默认的RCF没有保证哪些组件拥有客户端实例。你可以通过注册一个clientListener handler来做到与客户端组件交互。当一个组件被注册了clientListener han...
  • com_d_d
  • com_d_d
  • 2011年01月18日 23:35
  • 1309

JSF生命周期及组件开发P

  • 2008年05月06日 09:03
  • 564KB
  • 下载

(书摘)JavaServer Faces生命周期

JSF规范定义了6个不同的阶段: 还原视图应用请求值过程验证更新模型调用应用程序呈现响应 下图是生命周期最常见的流程:   还原视图: 如果请求页面以前显示过,“还原视图”阶段将检索...
  • kamemo
  • kamemo
  • 2012年05月10日 20:56
  • 579
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSF的生命周期--ADF Faces入门(文档阅读)
举报原因:
原因补充:

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