Week6——Lifecycle of JSF and 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:message
或h: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 标记库。
Week6——Lifecycle of JSF and Facelets的更多相关文章
- Java EE开发技术课程第六周(jsf、facelets)
1.jsf(java sever faces) 1.1 jsf的定义: jsf是一种用于构建java web应用程序的框架.它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器 ...
- jsf和facelets的生命周期
一.JSF生命周期 JSF是基于事件驱动.JSF生命周期分为两个主要阶段:执行阶段和渲染阶段. 1.执行阶段 分为六个阶段: 恢复视图阶段 当客户端请求一个JavaServer Faces页面时,Ja ...
- JSF生命周期&Facelets的生命周期
1.JSF生命周期 1)恢复视图(Restore View) 视图表示组成特定页面的所有组件.它被保存在 客户端(通常存储在隐藏字段中)或服务器中(通常在会话中).根据请求访问的视图ID(页面地址), ...
- 比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket
2009-06-23 Java Web层框架--JSF.Spring MVC.Stripes.Struts 2.Tapestry和Wicket他们各自的优点和缺点: JSF 优点: ◆Java EE标 ...
- JSF中使用f:ajax标签无刷新页面改变数据
ajax本是用在前端的一种异步请求数据的操作,广泛用于js中,一般的js框架如jq都有被封装好的方法,用于发起异步请求操作.异步操作可以增强用户体验和操作,越来越多的程序都在使用ajax.JSF的fa ...
- (转) [it-ebooks]电子书列表
[it-ebooks]电子书列表 [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...
- 开源UML工具推荐
1.StarUML StarUML是一个开源UML项目,可以开发快速,灵活,可扩展,多功能并且免费的UML/MDA平台.此项目运行在Win32平台之上.StarUML项目的目标是成为RationalR ...
- JSF Web框架与Facelets表现层技术
JSF(JavaServer Faces) JSF应用程序的生命周期从客户端对页面发出HTTP请求时开始,并在服务器响应页面时结束.JSF生命周期分为运行阶段和渲染阶段两个主要阶段. 执行阶段 当第一 ...
- Life Cycle(JSF+Facelets)
一.JSF Life Cycle: 图1 图2 应用程序的生命周期是指应用程序的各个阶段,从开始到结束.所有应用程序的生命周期.在web应用程序生命周期中,执行常见任务,包括以下内容.■处理传入的请求 ...
随机推荐
- 如何在window server IIS上部署可以使用web deploy?
环境: windows server2012 方式1: 1,下载"wpilauncher.exe" Web平台安装程序.下载地址:http://www.microsoft.com/ ...
- 再学Java 之 Integer 包装类缓存
前言:本博文将涉及的Java的自动装箱和自动拆箱,可以参考 这篇文章 和 官方教程 ,这里不再赘述. 首先,先看一个小程序: public class Main { public static voi ...
- Fiddler Web Debugger是什么?(图文详解)
不多说,直接上干货! 1.为什么是Fiddler? 抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark. 见 Windows里安装wireshark或 ...
- Chapter 3 Phenomenon——3
It took every ounce of my concentration to make it down the icy brick driveway alive. 我用所有我的注意力去确定车道 ...
- elasticSearch6源码分析(2)模块化管理
elasticsearch里面的组件基本都是用Guice的Injector进行注入与获取实例方式进行模块化管理. 在node的构造方法中 /** * Constructs a node * * @pa ...
- 国际化实现之基于jquery
jQuery.i18n.properties是一款轻量级的jQuery国际化插件,能实现Web前端的国际化. jQuery.i18n.properties 采用 .properties 文件对 Jav ...
- nodejs zip压缩版安装与配置
Node.js 1.下载 下载地址:https://nodejs.org/zh-cn/download/ 选择相应的版本下载 2.解压缩 将文件解压到要安装的位置,并新建两个目录 node-globa ...
- 三种数据库访问——Spring JDBC
本篇随笔是上两篇的延续:三种数据库访问——原生JDBC:数据库连接池:Druid Spring的JDBC框架 Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发. Spring主要 ...
- mysql 修改初始化密码【转】
转:http://www.jb51.net/article/39454.htm 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password fo ...
- Ubuntu使用心得
因为开发学习需要,也接触了一些Ubuntu系统,玩崩了两次系统之后,也学到了一些东西. -------------------------------------------------------- ...