一、JSF是构建Java Web程序的服务器端的组件框架,包括:
1)一个API,用来表示组件及管理他们的状态;处理事件;服务器端;数据转换;定义页面导航;支持国际化和可访问性;并且提供对以上功能API的扩展。
2)一个标签库,用来把组件添加到页面,并且可以把组件与服务器端对象连接起来。
二、JSF提供了一个定义良好的编程模型以及不同的标签库,只要付出很少的努力,就可以做到:
1)创建Web页面;
2)通过组件标签把组件到Web页面;
3)绑定页面上组件到服务器端对象上;
4)重用及扩展自定义组件;
5)Save and restore application state beyond the life of server requests;
三、JSF Application
JSF应用和其他的Web应用提供的功能类似,一个典型的JSF应用包括以下部分:
1)Web页面的集合,在页面上放置了很多组件。
2)标签集合,用来把组件添加到页面上。
3)Managed Beans集合(Container管理的POJOs),这些Beans是作为页面上组件的支撑,用来描述组件的属性和功能。
4)web.xml
5)(可选)一个或多个资源配置文件,比如faces-config.xml,用来定义页面导航规则,配置Bean和自定义对象(如自定义组件)。
6)(可选)自定义对象的集合,如自定义组件,Converter,Validator,Listener等。
7)(可选)自定义标签的集合,应用在页面上表示自定义的对象。
四、JSF技术的优点
JSF技术的最大优点就是把表现层和逻辑层分开了。JSF技术中包含了Facelets技术,Facelets技术有以下优点:
1)代码可以重用和被扩展,通过组件模版和组合组件。
2)可以通过注解的方式注册一个Managed Bean作为资源提供给JSF应用。
3)最重要的,JSF提供了丰富的架构来管理组件状态,处理组件数据,验证用户输入和处理事件。
五、JSF的UI组件模型
JSF组件包括UI组件和非UI组件,UI组件是可重用和可配置的,可以是简单的组件比如一个Button,也可以是复合组件比如由多个组件组成的Table。
JSF提供了丰富和灵活的UI组件架构,包括:
1)javax.faces.component.UIComponent类集合,定了UI组件的状态和行为;
2)一个渲染(rendering)模型,定义如何以不同方式来渲染一个组件。
3)一个转换(conversion)模型,定义如何注册Convertor到一个组件上。
4)一个事件及监听模型,定义如何处理一个组件上的事件。
5)一个验证(validation)模型,定义如何注册一个Validator到一个组件上。
六、JSF的页面导航模型
页面导航就是决定下一个显示的页面或者的视图的一系列规则。JSF页面导航规则,可以是隐式的,也是由用户显式的自定义。
隐式的比如:<h:commandButton value="submit" action="response">,当按下按钮,页面导航到名字为response的页面上。
用户自定义的导航规则是在资源配置文件中配置的,比如:faces-config.xml中就可以配置。导航规则的默认格式为:
<navigation-rule>
<description></description
<from-view-id></from-view-id>
<navigation-case>
<from-action></from-action>
<from-outcome></from-outcome>
<if></if>
<to-view-id></to-view-id>
</navigation-case>
</navigation-rule>
显式导航的过程是这样的:
1)NavigationHandler
根据from-view-id选择一个与当前页匹配的规则;
2)同时匹配action和outcome,如果成功,显示to-view-id对应的页面;
3)如果同时匹配失败,直接匹配outcome,如果成功,显示to-view-id对应的页面;
4)如果匹配outcome失败,直接匹配action,如果成功,显示to-view-id对应的页面;
5)如果都失败,继续显示当前页面。
七、JSF应用的生命周期
一个JSF页面代表一个组件树,称为一个视图(view)。
JSF应用的生命周期从客户端向一个页面发起HTTP请求开始,到服务端返回一个HTML页面给客户端结束。
这个过程可以分为两个主要的阶段:执行阶段(execute)和渲染阶段(render)。执行阶段又可以进一步划分成
多个子阶段,用来支持复杂的组件树。具体来说包括以下几个子阶段:
1)重建视图阶段(Restore View);
2)应用请求值阶段(Apply Request Value);
3)处理验证阶段(Process Validation);
4)更新模型值阶段(Update Model Value);
5)触发应用阶段(Invoke Application);
6)渲染响应阶段(Render Response)。