JSF Web框架与Facelets表现层技术
JSF(JavaServer Faces)
JSF应用程序的生命周期从客户端对页面发出HTTP请求时开始,并在服务器响应页面时结束。
JSF生命周期分为运行阶段和渲染阶段两个主要阶段。
执行阶段
当第一次请求时,构建或恢复应用程序视图。对于其他后续请求,执行其他操作。
执行阶段被进一步分成以下子阶段:
- 恢复视图阶段
- 应用请求值阶段
- 流程验证阶段
- 更新模型值阶段
- 调用应用阶段
- 渲染响应阶段
渲染阶段
在此阶段,请求的视图作为对客户端浏览器的响应。视图渲染是以HTML或XHTML生成输出的过程。
在渲染过程中采取以下步骤:
- 当客户端对index.xhtml网页进行初始请求时,编译应用程序。
- 应用程序在编译后执行,并为应用程序构建一个新的组件树,并放置在FacesContext中。
- 使用由EL表达式表示的组件和与其关联受托管bean属性填充组件树。
- 基于组件树。建立了新的视图。
- 该视图作为响应呈现给请求客户端。
- 组件树被自动销毁。
- 在后续请求中,重新构建组件树,并应用已保存的状态。
JSF实现使用一个控制器servlet来处理请求,然后执行JSF生命周期。
如图显示了JSF生命周期中的事件处理。
JSF是基于事件驱动的,从"应用请求值"阶段开始,JSF实现会创建事件并在每个生命周期阶段期间将其添加到事件队列中。
事件类型
(1)动作事件(Action Event):普通动作响应。
(2)即时事件(Immediate Event):立即处理,不验证/转换/更新模型值(即bean不会保存属性)。
(3)值改变事件(Value Change Event):选择UI值改变后,级联调度。如国际化中选择语言。
(4)阶段事件(Phase Event):监听响应的JSF生命周期。
事件监听器可通过下列三种方式之一影响JSF生命周期:
(1) 让生命周期正常进行。
(2) 调用FacesContext类的renderResponse方法以忽略生命周期的其他部分,直接跳转到“呈现响应”阶段。
(3) 调用FacesContext类的responseComplete方法以完全略过生命周期的其他阶段。
参考源:
易百教程:https://www.yiibai.com/jsf/jsf-life-cycle.html
开源中国:https://my.oschina.net/zhaoqian/blog/71866
百度百科:https://baike.baidu.com/item/jsf%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F
Facelets
定义
Facelets是一种轻量级的页面声明语言,用于使用HTML样式构建JSF视图。
Facelets是用来建立JSF应用程序时的一个可供选择的表现层技术。
Facelets提供了一个强大的模板化系统,使用HTML样式的模板来定义JSF的表现层,减少了组件整合进表现层时候冗余的代码。
功能
- 使用XHTML创建网页
- 除了支持JSF和JSLT标记库之外,还提供Facelets标签库
- 支持表达语言(EL)
- 使用组件和页面模板
优点
- 通过模板和复合组件增加代码可重用性
- 通过定制提供组件和其他服务器端对象的功能可扩展性
- 编译速度更快
- 在编译时验证表达式语言
- 高性能渲染能力
JSF(JavaServer Faces)技术支持各种标签库,以将组件添加到网页。为了支持JavaServer Faces标签库机制,Facelets使用XML命名空间声明。
Facelets支持的标签库有JSF Facelets标签库、JSF HTML标签库、JSF核心标签库、传递元素标签库、传递属性标签库、复合组件标签库、JSTL核心标签库、JSTL函数标签库。
Facelets应用程序的生命周期
- 在客户端使用Facelets创建的网页发出新请求时生命周期开始。JSF创建一个新的组件树或javax.faces.component.UIViewRoot并放入FacesContex。
- 如果可用的UIViewRoot应用于Facelets,视图可以填充组件进行渲染。
- 新建的视图作为对客户端的响应而被渲染。
- 在渲染时,存储此视图的状态用于下一个请求。存储输入组件和表单数据的状态。
- 客户端可以与视图交互,并从JSF应用程序请求另一个视图。此时,保存的视图从存储状态恢复。
- 恢复视图再次通过JSF生命周期,如果没有验证问题,并且没有触发任何操作,最终将生成新视图或重新呈现当前视图。
- 如果请求相同的视图,则再次呈现存储的视图。
- 如果要求新视图,则继续执行第2步。
- 将新视图作为对客户端的响应。
参考源:
易百教程:https://www.yiibai.com/jsf/facelets.html
百度百科:https://baike.baidu.com/item/facelets/10077801?fr=aladdin
JSF Web框架与Facelets表现层技术的更多相关文章
- 表现层技术以及Freemaker使用教程
表现出计数以及Freemaker详解 在java领域,表现层技术主要有三种:jsp.freemarker.velocity.jsp是大家最熟悉的技术优点: 1.功能强大,可以写java代码 2.支持j ...
- (转)淘淘商城系列——SSM框架整合之表现层整合
http://blog.csdn.net/yerenyuan_pku/article/details/72721120 上文我们一起学习了Service层的整合,本文将教大家如何整合表现层. 我们在t ...
- web框架开发-Django模型层(1)之ORM简介和单表操作
ORM简介 不需要使用pymysql的硬编码方式,在py文件中写sql语句,提供更简便,更上层的接口,数据迁移方便(有转换的引擎,方便迁移到不同的数据库平台)…(很多优点),缺点,因为多了转换环节,效 ...
- Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)
摘要: 模版层(模板语法) 模板语法 过滤器 标签 自定义过滤器.标签 inclusion_tag 模板的继承 模板的导入 一.模板语法: 常用语法:{{ }} 变量相关{% %} ...
- Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)
摘要: 路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页.虚拟环境 视图层 JsonResponse FBV 与 CBV(function base views与class bas ...
- web框架开发-Django模型层(2)-多表操作
很重要,都是精华 多表关系模型 一对一 一旦确定表关系是一对一,在两张表中的任意一张表中建立关联字段+Unique 一对多 一旦确定表关系是一对多,创建关联字段在多的表中 多对多 一旦确定表关系是多对 ...
- Web框架之Django_06 模型层了解(F查询、Q查询、事务、update和save、only和defer、choice属性、bulk_create)
摘要: F查询 Q查询 事务 一.F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢?Django 提供 F() 来 ...
- Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)
摘要: 单表查询 多表查询 聚合查询 分组查询 一.Django ORM 常用字段和参数: 常用字段:#AutoFieldint自增列,必须填入参数primary_key = True,当model中 ...
- JAVA web 框架集合
“框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...
随机推荐
- Fiddler 教程(转载,鉴于原作者关闭了访问fiddler系列文章)
阅读目录 Fiddler的基本介绍 Fiddler的工作原理 同类的其它工具 Fiddler如何捕获Firefox的会话 Fiddler如何捕获HTTPS会话 Fiddler的基本界面 Fiddler ...
- php---截取描述方法
参考: https://www.cnblogs.com/xsphehe/p/5682004.html 示例: /** * 参数说明 * $string 欲截取的字符串 * $sublen 截取的长度 ...
- python标准库和第三方库的区别
1.python的标准库是随着pyhon安装的时候默认自带的库. 2.python的第三方库,需要下载后安装到python的安装目录下,不同的第三方库安装及使用方法不同. 3.它们调用方式是一样的,都 ...
- 9.8Django
2018-9-8 14:34:38
- Java工程师之SpringBoot系列教程前言&目录
前言 与时俱进是每一个程序员都应该有的意识,当一个Java程序员在当代步遍布的时候,你就行该想到我能多学点什么.可观的是后端的框架是稳定的,它们能够维持更久的时间在应用中,而不用担心技术的更新换代.但 ...
- iptables、防火墙配置、NAT端口映射
一,配置一个filter表放火墙 (1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) targ ...
- HDU 1890 - Robotic Sort - [splay][区间反转+删除根节点]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1890 Time Limit: 6000/2000 MS (Java/Others) Memory Li ...
- 蓝桥杯 - G将军有一支训练有素的军队 - [树形DP]
G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军).现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加敢死 ...
- python3学习笔记(5)_slice
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #切片slice 大大简化 对于指定索引的操作 fruits ...
- asm 32 /64
我使用NASM编写的,运行在32位windows和linux主机上,但后来需求增加了,需要在64位windows和linux上运行,windows自身有个wow(windows on windows) ...