jsf和facelets的生命周期

一、JSF生命周期

JSF是基于事件驱动。JSF生命周期分为两个主要阶段:执行阶段和渲染阶段。

1.执行阶段

  分为六个阶段:

  • 恢复视图阶段

  当客户端请求一个JavaServer Faces页面时,JavaServer Faces实现开始恢复视图阶段。 在此阶段,JSF将视图中的组件构建为请求页面,线性事件处理程序和验证器的视图,并将视图保存在FacesContext实例中。如果对该页面的请求是回发,那么与该页面相对应的视图已经存在于FacesContext实例中。 在此阶段,JavaServer Faces实现通过使用保存在客户端或服务器上的状态信息来还原视图。

  • 应用请求值阶段

  在此阶段,在回发请求期间恢复组件树。 组件树是表单元素的集合。树中的每个组件通过使用其decode(processDecodes())方法从请求参数中提取其新值。 之后,该值将本地存储在每个组件上。

  1.如果任何解码方法或事件侦听器在当前FacesContext实例上调用了renderResponse方法,则JavaServer Faces实现将跳过“渲染响应”阶段。

  2.如果任何事件在此阶段已排队,则JavaServer Faces实现将事件广播到有兴趣的监听器。

  3.如果应用程序需要重定向到其他Web应用程序资源或生成不包含任何JavaServer Faces组件的响应,则可以调用FacesContext.responseComplete()方法。

  4.如果当前请求被识别为部分请求,则从FacesContext检索部分上下文,并应用部分处理方法。

  • 流程验证阶段

  在此阶段,JavaServer Faces通过使用其validate()方法来处理在组件上注册的所有验证器。 它检查指定验证规则的组件属性,并将这些规则与为组件存储的本地值进行比较。 JavaServer Faces还完成了没有将immediate属性设置为true的输入组件的转换。

  1.如果任何验证方法或事件侦听器在当前FacesContext上调用了renderResponse方法,则JavaServer Faces实现将跳过“渲染响应”阶段。

  2.如果应用程序需要重定向到不同的Web应用程序资源或生成不包含任何JavaServer Faces组件的响应,则可以调用FacesContext.responseComplete方法。

  3.如果事件在此阶段已排队,则JavaServer Faces实现将它们广播给有兴趣的监听器。

  4.如果当前请求被识别为部分请求,则从FacesContext检索部分上下文,并应用部分处理方法。

  • 更新模型值阶段

  确保数据有效后,它遍历组件树,并将相应的服务器端对象属性设置为组件的本地值。 JavaServer Faces实现只更新输入组件的value属性指向bean属性。 如果本地数据无法转换为bean属性指定的类型,生命周期将直接前进到“渲染响应”阶段,以便重新呈现页面并显示错误。

  • 调用应用阶段

  在此阶段,JSF处理应用程序级事件,例如提交表单或链接到另一个页面。现在,如果应用程序需要重定向到其他Web应用程序资源或生成不包含任何JSF组件的响应,则可以调用FacesContext.responseComplete()方法。之后,JavaServer Faces实现将控制转移到“渲染响应”阶段。

  • 渲染响应阶段

  这是JSF生命周期的最后阶段。 在此阶段,JSF将构建视图并将权限委托给相应的资源来呈现页面。

  1.如果这是初始请求,则页面上表示的组件将被添加到组件树中。

  2.如果这不是初始请求,组件已经添加到树中,不需要再添加。

  3.如果请求是回应,并且在应用请求值阶段,过程验证阶段或更新模型值阶段期间遇到错误,则在此阶段将再次呈现原始页面。

  如果页面包含h:messageh:messages标签,页面上会显示任何排队的错误消息。在渲染视图的内容之后,保存响应的状态,以便后续请求可以访问它。 恢复视图阶段可以使用保存的状态。

2.渲染阶段

  在此阶段,请求的视图作为对客户端浏览器的响应。 视图渲染是以HTML或XHTML生成输出的过程。 所以,用户可以在浏览器看到它。

在渲染过程中采取以下步骤。

  • 当客户端对index.xhtml网页进行初始请求时,编译应用程序。
  • 应用程序在编译后执行,并为应用程序构建一个新的组件树,并放置在FacesContext中。
  • 使用由EL表达式表示的组件和与其关联受托管bean属性填充组件树。
  • 基于组件树。 建立了新的视图。
  • 该视图作为响应呈现给请求客户端。
  • 组件树被自动销毁。
  • 在后续请求中,重新构建组件树,并应用已保存的状态。

原文参照:https://www.yiibai.com/jsf/jsf-life-cycle.html

一、Facelets

1.Facelets是用来建立JSF应用程序时的一个可供选择的表现层技术。提供了一个强有力的模板化系统,让你使用HTML样式的模板来定义JSF的表现层,减少了组件整合进表现层时候冗余的代码,而不需要一个web容器。

2.优点

  使用 Facelets 的好处:即组件复合和模板框架,它的核心 是组件,而不是 Servlets 输出。但是采用 Facelets 也有些不足。其中之一就是,对 Facelets 的 IDE 支持极少。

  使用 Facelets API 非常自然和直观。

  如果要使用新的 JSF 组件库,必须有公开这个库的 Facelets 标记库。

原文地址:https://www.cnblogs.com/xiong143/p/8855411.html

时间: 2024-10-17 06:36:36

jsf和facelets的生命周期的相关文章

jsf的运行原理及生命周期

一.jsf的运行原理(工作方式) 1.jsf应用是事件驱动的,当一个事件发生时(比如用户单击一个按钮),事件通知通过HTTP发往服务器,服务器端使用叫做FacesServlet的特殊servlet处理该通知,web容器里每一个jsf应用都有它自己的FacesServlet; 在后台,每一个jsf请求都触发了3件事情: 1)FacesServlet创建FacesContext(该对象中包含Web容器传给FacesServlet的service方法的ServletContext,ServletReq

JSF教程(8)——生命周期之Apply Request Values Phase

当一个组件树在一个postbacks请求中被恢复之后其中每个组件从request的参数中取得各自的值,这里使用的是processDecodes方法.这个值会保存在本地的每个组件中,在源码中此过程的代码较为简单,因为实现者将取值这个操作全部封装在processDecodes方法中.不过说实话JSF的这部分的实现非常失败,因为在UIViewRoot中有将近两千行代码,这,这,这-- (UIViewRoot.java中的processDecodes方法) public void processDeco

JSF生命周期学习

JSF页面的生命周期与JSP页面的生命周期相类似:客户相页面发出HTTP请求,服务器返回翻译成HTML的响应,但JSF提供了更多处理页面的服务.生命周期与页面编写者无关,这个概念主要面对开发人员. 1. 重建视图阶段(Restore View Phase)当请求JSF页面时,如点击按钮或链接,JSF开始重建视图阶段.在 这个阶段JSF建立页面的视图,给视图中的组件设置事件处理器.校验器,在FacesContext中保存视图.FacesContext含有所有处理请 求的信息,所以页面元素包括组件标

atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较

atitit.提升开发效率---使用服务器控件生命周期  asp.net 11个阶段  java jsf 的6个阶段比较 如下列举了服务器控件生命周期所要经历的11个阶段. (1)初始化-- --在此阶段中,主要完成两项工作:一.初始化在传入Web请求生命周期内所需的设置:二.跟踪视图状态.首先,页面框架通过默认方式引发Init事件, 并调用OnInit()方法,控件开发人员可以重写该方法为控件提供初始化逻辑.此后,页面框架将调用TrackViewState方法来跟踪视图状态. 需要注意的是:多

JSF教程(9)——生命周期之Process Validations Phase

在这个过程当中JSF的实现者使用processValidators方法处理所有在tree中的组件中注册的验证器.验证的过程就是通过每个组件已有的规则对其已经保存的值进行校验,同时也对输入的值进行校验,前提是组件的immediate属性没有设置为true.从代码来看在UIViewRoot中的这个processValidators方法和上个阶段中的processDecodes基本一致,不用说下一个阶段(Update ModelValues Phase)也会有相类似的方法(processUpdates

JSF教程(10)——生命周期之Update Model Values Phase

在整个JSF生命周期中经历了取值.验证的阶段最终从request中拿到合理的值,下面就是在本阶段给相应的服务端对象(ManageBean)赋值了.JSF实现只是去更新和input组件中value属性对应的bean的属性的值,也就是说如果在界面上没有讲ManageBean的属性"绑定"到Input类的组件中那么这个Bean的属性是不会更新的.这里需要留意的是如果本地的数据不能转化为对应Bean的属性类型,那么生命周期将直接定位到Render Response步骤,这时候页面将会显示错误信

JSF控件的immediate属性和页面生命周期

JSF中的控件基本都有immediate属性,对于这个属性的使用总结如下,更详细内容可参考Oracle官方文档. 1,为了更好的理解immediate属性,先看一下JSF页面的生命周期: JSF页面的生命周期有六个,可参考下面的图:ADF页面是建立在JSF页面基础上的,它的生命周期包括JSF页面的六个生命周期外,还包括Init Context and Prepare Model.Validate Model Updates.Metadata Commit和Prepare Render几个阶段.J

JSF教程(11)——生命周期之Invoke Application Phase

在这个阶段JSF实现将处理任何应用界别的事件,例如表单的提交或者链接点击后跳转到另一个页面. 这时如果应用需要重定向不同 的web应用字眼或者产生一个资源其并不喊任何的JSF组件,那么就调用FacesContext.responseComplete方法. 如果正在被处理的这个视图是从重建状态信息从先前的一个请求而且如果一个组件引发了一个事件,那么这些事件将会传递到相关的监听器中. 最终JSF实现者将控制权转移到下一个步骤render Response phase 这个阶段是整个JSF宏观生命周期

javaEE 之 JSF与Facelets

JSF:一种构建java web的标准框架 JSF的生命周期分为运行阶段和渲染阶段两个主要的阶段 运行阶段: 当第一次请求时,构建或恢复应用程序视图.对于其他后续请求,执行其他操作,执行阶段被划分成以下子阶段: 1.恢复视图阶段 2.应用请求值阶段 3.流程验证阶段 4.更新模型值阶段 5.调用应用阶段 6.渲染响应阶段 各个阶段的详细说明如下: 渲染阶段: 在此阶段,请求的视图作为客服端浏览器的响应.视图渲染是以HTML或XHTML生成输出的过程. 在渲染过程中采取以下步骤: 1.当客服端对I