j2ee高级开发技术课程第六周
一.jsf(java server faces)的运行原理(工作方式)
1.jsf应用是事件驱动的,当一个事件发生时(比如用户单击一个按钮),事件通知通过HTTP发往服务器,服务器端使用叫做FacesServlet的特殊servlet处理该通知,web容器里每一个jsf应用都有它自己的FacesServlet;
在后台,每一个jsf请求都触发了3件事情:
1)FacesServlet创建FacesContext(该对象中包含Web容器传给FacesServlet的service方法的ServletContext,ServletRequest,ServletRespons对象,在处理过程中主要就是修改这个FacesContext)
2)FacesServlet把控制权交给Lifecycle
3)Lifecycle分6个阶段处理FacesContext(也即jsf生命周期过程)
二.jsf生命周期过程
1. 重建视图: 建立组件树,如果是首次渲染,则组件树被重置合适的状态;如果不是首次渲染,则组件树被创建跳到响应阶段(JSF的组件树结构和DOM是一样的,只不过后者是client前者是server)。
2. 应用请求值: 树中的每个组件都能从请求参数中提取到新的值,并把值存储本地,之后处理所有与组件相关的事件进入队列,如果某个组件的immediate属性设置为true,那么验证,转换,以及与组件关联的事件在这个阶段被处理.
3. 处理验证: 组件值转换成与之相对应的数据类型。如果转换失败,这一阶段将继续完成所有剩余的转换器,验证和运行所需的检查,但在完成后,跳转到生命周期的Render Response阶段。如果验证成功,则检查组件上的required 的属性。如果该属性是必须的并且组件中输入了值,那么与之相关的验证程序运行。如果required的属性是必须但又没有输入值,这一阶段完成(所有剩余验证程序还会继续执行),然后生命周期跳跃到Render Response阶段。如果required 属性标识为false,不管组件中有没有输入值,验证过程都不会运行。
4. 更新模型: 验证组件的本地值移动到模型中,同时本地副本被丢弃。
5. 调用应用程序: 执行应用级逻辑(如事件处理程序)。
6. 呈现响应: 呈现树中的组件。后续请求和Restore View阶段保存状态信息。
二、Facelets
Facelets是一种轻量级的页面声明语言,用于使用HTML样式构建JSF(JavaServer Faces)视图。
它包括以下功能:
- 它使用XHTML创建网页。
- 除了支持JavaServer Faces和JSTL标记库之外,它还支持Facelets标签库。
- 它支持表达语言(EL)。
- 它是使用组件和页面的模板。
优点
- 它通过模板和复合组件支持代码可重用性。
- 它通过定制提供组件和其他服务器端对象的功能可扩展性。
- 编译时间更快
- 它在编译时验证表达式语言。
- 高性能渲染能力。
JSF(JavaServer Faces)技术支持各种标签库,以将组件添加到网页。 为了支持JavaServer Faces标签库机制,Facelets使用XML命名空间声明。
下表显示了Facelets支持的标签库。
| 标签库 | URI | 前缀 | 示例 | 内容 |
|---|---|---|---|---|
| JSF Facelets标签库 | http://xmlns.jcp.org/jsf/facelets | ui: |
ui:component,ui:insert |
模板标签 |
| JSF HTML标签库 | http://xmlns.jcp.org/jsf/html | h: |
h:head,h:body |
所有UI组件对象的JavaServer Faces组件标记 |
| JSF核心标签库 | http://xmlns.jcp.org/jsf/core | f: |
f:actionListener, f:attribute |
JSF标签独立于任何特定渲染工具包的自定义操作 |
| 传递元素标签库 | http://xmlns.jcp.org/jsf | jsf: |
jsf:id |
支持HTML5友好标记的标签 |
| 传递属性标签库 | http://xmlns.jcp.org/jsf/passthrough | p: |
p:type |
支持HTML5友好标记的标签 |
| 复合组件标签库 | http://xmlns.jcp.org/jsf/composite | cc: |
cc:interface |
支持复合组件的标签 |
| JSTL核心标签库 | http://xmlns.jcp.org/jsp/jstl/core | c: |
c:forEach, c:catch |
JSTL 1.2核心标签 |
| JSTL函数标签库 | http://xmlns.jcp.org/jsp/jstl/functions | fn: |
fn:toUpperCase, fn:toLowerCase |
JSTL 1.2函数标签 |
Facelets应用程序的生命周期
JSF规范定义了JavaServer Faces应用程序的生命周期。以下步骤为基于 Facelets 的应用程序的过程描述。
生命周期是在客户端使用
Facelets创建的网页发出新请求时启动。 JSF创建一个新的组件树或javax.faces.component.UIViewRoot并放入FacesContex。如果可用的
UIViewRoot应用于Facelets, 视图可以填充组件进行渲染。新建的视图作为对客户端的响应而被渲染。
在渲染时,存储此视图的状态用于下一个请求。 存储输入组件和表单数据的状态。
客户端可以与视图交互,并从JSF应用程序请求另一个视图。 此时,保存的视图从存储状态恢复。
恢复视图再次通过JSF生命周期,如果没有验证问题,并且没有触发任何操作,最终将生成新视图或重新呈现当前视图。
如果请求相同的视图,则再次呈现存储的视图。
如果要求新视图,则继续执行【步骤2】。
将新视图作为对客户端的响应。
j2ee高级开发技术课程第六周的更多相关文章
- j2ee高级开发技术课程第五周
pplet 是一种 Java 程序.它一般运行在支持 Java 的 Web 浏览器内.因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序. 如下所示是独立的 J ...
- j2ee高级开发技术课程第三周
一.分析Filter例子(轻量级javaee企业应用实战p132) // 执行过滤的核心方法 public void doFilter(ServletRequest request, ServletR ...
- j2ee高级开发技术课程第八周
介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢? 因 ...
- j2ee高级开发技术课程第七周
来源:https://baike.baidu.com/item/JSON/2462549?fr=aladdin JSON(JavaScript Object Notation, JS 对象标记) 是一 ...
- j2ee高级开发技术课程第一周
一.课程目标 这学期开始了J2EE高级开发技术这门课,在此之前我学习了javaSE,为这门课的学习打下了一定的基础.到这学期的结束我希望我能熟悉javaee,能开发企业级应用,对开发轻量级企业应用的主 ...
- j2ee高级开发技术课程第二周(web请求的整个过程、XML)
博客非原创,只是收集整理了一下网上的一些文章 一.web请求的整个过程 1)把URL分割成几个部分:协议.网络地址.资源路径.其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括 ...
- j2ee高级开发技术课程第十四周
RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果.这个请求包括一个参数集和一个文本集,通常形成“cl ...
- Java EE开发技术课程第六周(jsf、facelets)
1.jsf(java sever faces) 1.1 jsf的定义: jsf是一种用于构建java web应用程序的框架.它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器 ...
- j2ee高级开发技术课程第四周
分析hello.java,在hello1项目中.下载链接:https://github.com/javaee/tutorial-examples/tree/master/web/jsf/hello1 ...
随机推荐
- 运营商挂时长神器,批量导入账号,导出账号状态,随机修改MAC地址
话不多说,直接上图 可批量导入账号,同时修改广域网口MAC地址 导出账号状态,包括在线时长,MAC,IP地址等等
- js插件解读
1.calendar.js:日期插件:2.html5shiv.js:用于解决IE9以下版本浏览器对HTML5新增标签不识别,并导致CSS不起作用的问题的js文件:3.jquery.js里的代码是没有进 ...
- windows 驱动开发 MDL 内核层 用户层共享内存
参考资料 https://blog.csdn.net/wdykanq/article/details/7752909 http://blog.51cto.com/laokaddk/404584 内核层 ...
- Linux块设备IO子系统(一) _驱动模型
块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备,块设备(blockdevice)是一种具有一定结构的随机存取设备,对这种设备的读写是按块(所以叫块设备)进行的,他使用缓 ...
- python数据分析及展示(三)
一.Pandas库入门 1. Pandas库的介绍 http://pandas.pydata.org Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas ...
- I - All X
F(x,m) 代表一个全是由数字x组成的m位数字.请计算,以下式子是否成立: F(x,m) mod k ≡ c Input 第一行一个整数T,表示T组数据. 每组测试数据占一行,包含四个数字x,m,k ...
- php跨域发送请求原理以及同步异步问题
<script async type="text/javascript" src="http://lisi.com/data.php?flag=1"> ...
- 微信小程序文字超出加省略号
我查资料的时候搜到这个博客 http://blog.csdn.net/u010168409/article/details/54429678 view{ overflow:hidden; //超出一行 ...
- java JDK环境的配置
1. 在Administrator用户变量中新建: 变量名:JAVA_HOME 变量值:C:\Program Files (x86)\Java\jdk1.7.0_01 2. 在Administra ...
- python语法_算数运算+赋值运算符+比较运算符+逻辑运算符
算术运算符 + - * / 加减乘除 5/2 = 2.5 5//2 = 2 整除,地板除 5%2= 1 取余数 2**10 指数运算 2的10次方 算术优先级 无论多少级,都使用()小括号进行优先 ...