为开发JSF应用,需要一个JSF实现。参考实现(RI)是所有其它实现都要遵循的标准。
所有JSF应用都必须的JAR文件:
Jsf-api.jar, jsf-impl.jar, jstl.jar, standard.jar, commons-beanutils.jar,
commons-collections.jar, commons-digester.jar, commons-logging.jar
web.xml配置:
<web-app>
…
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*(称为前缀映射或*.faces称为后缀映射)</url-pattern>
</servlet-mapping>
…
</web-app>
JSF应用的配置参数:
Context参数
|
说明
|
默认
|
javax.faces.CONFIG_FILES
|
逗号分隔的上下文相关的资源路径列表,JSF将在装载WEB-INF/faces-config.xml之前载入这些资源
|
无
|
java.faces.DEFAULT_SUFFIX
|
当使用扩展名映射(后缀映射如*.faces)时,所使用资源的默认后缀
|
.jsp
|
java.faces.LIFECYCLE_ID
|
当在这个应用中处理JSF请求时,所使用的生命周期实例的标识符
|
默认的生命周期模型
|
javax.faces.STATE_SAVING_METHOD
|
指示在客户端(client)还是在服务器端(server)保存UI组件的状态
|
server
|
RI特定的配置参数:
Context参数
|
说明
|
默认
|
com.sun.faces.NUMBER_OF_VIEWS_IN_SESSION
|
当状态保存方法设置为server时,控制会话中保存的视图数量
|
无
|
com.sun.faces.validateXml
|
告诉JSF根据DTD验证配置文件
|
false
|
com.sun.faces.verifyObjects
|
告诉JSF验证其可以创建应用对象(组件,呈现器,转换器等)
|
false
|
MyFaces特定的配置参数:
Context参数
|
说明
|
默认
|
myfaces_allow_javascript
|
True,如果组件允许JavaScript
|
true
|
myfaces_pretty_html
|
指定显示的HTML是否进行格式化,以便它是“人可读的”(给输出附加的不影响HTML代码的行分隔符和空格)
|
true
|
myfaces_allow_designmode
|
使用CGLib字节码类修改的实现设计模式
|
false
|
JSF应用配置总体分为三种:分别针对日常应用开发,UI扩展开发(编写组件,呈现器,转换器或者验证器)和高级开发。
faces-config.xml中三类主要配置类别以及对应的XML元素(顶层根元素<faces-config>)
类别
|
特征
|
XML元素
|
日常应用配置和高级扩展的注册
|
应用配置。用于指定支持的语言,定制应用消息的位置,默认的呈现包,以及高级的可插入组件
|
<application>
|
受管bean创建工具。
|
<managed-bean>
|
控制在特定范围的对象的自动创建被引用的bean
|
<referenced-bean>
|
用来告诉IDE其它可以访问的对象的导航规则,控制一个页面到另一个页面的应用流
|
<navigation-rule>
|
用户界面扩展注册
|
组件注册。用于向系统注册组件
|
<component>
|
呈现包和呈现器注册。用于向呈现包添加呈现器或者定义整个新的呈现包
|
<render-kit>
|
验证器注册。用于向系统注册验证器
|
<validator>
|
转换器注册。用于向系统注册转换器
|
<converter>
|
高级扩展特征的配置
|
阶段监听器注册。向系统注册阶段监听器
|
<phase-listener>
|
工厂配置。定义实例化核心JSF类的工厂
|
<factory>
|
faces-config.xml:
<?xml version=”1.0”?>
<!DOCTYPE faces-config PUBLIC
“-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN”
http://java.sun.com/dtd/web-facesconfig_1_0.dtd>
<faces-config>
<!— 场所有消息资源束 -->
<application>
<message-bundle>carstore.bundles.Messages</message-bundle>
<local-config>
<default-locale>en</default-locale>
<supported-locale>de</supported-locale>
<supported-locale>fr</supported-locale>
<supported-locale>es</supported-locale>
</local-config>
</application>
<!— 定制验证器 -->
<validator>
<description> Registers the concrete Validator implementation,
crstore.FormatValidator with the validator identifier,FormatValidator.
</description>
<validator-id>FormatValidator</validator-id>
<validator-class>carstore.FormatValidator</validatore-class>
<attribute>
<description>List of format patterns separated by ‘|’. The validator
Compares these patterns against the data entered in a component that
Has this validator registered on it.
</description>
<attribute-name>formatPatterns</attribute-name>
<attribute-class>java.lang.String</attribute-class>
</attribute>
</validator>
<!— 定制转换器 -->
<converter>
<description>Registers the concrete Converter implementation,
carstore.CreditCardConverter using the ID, creditcard.
</description>
<converter-id>creditCardConverter</converter-id>
<converter-class>carstore.CreditCardConverter</converter-class>
</converter>
<!— 受管bean -->
<managed-bean>
<description> abc </description>
<managed-bean-name>customer</managed-bean-name>
<managed-bean-class>carstore.CustomerBean</managed-bean-class>
<managed-bean-scope> session </managed-bean-scope>
<managed-bean>
<!-- 导航规则 -->
<navigation-rule>
<from-view-id>/chooseLocale.jsp</from-view-id>
<navigation-case>
<description>abc</description>
<from-outcome>storefront</from-outcome>
<to-view-id>/storefront.jsp</to-view-id>
</navigation-case>
</navigation-rule>
…
</faces-config>
JSF定制标签库:
URI
|
名称
|
通用前缀
|
说明
|
http://java.sun.com/jsf/core
|
Core
|
f
|
包含独立于特定呈现器的标签(如<f:view>,<validator>等等)
|
http://java.sun.com/jsf/html
|
HTML
|
h
|
包含所有标准组件和HTML呈现包
|
JSF支持两种包含。对动态包含,有两个要求:
1. 被包含页面必须封装在JSF <f:subview> 核心标签中。这个标签可以位于被包含页面中也可以围绕包含语句;
2. 被包含页面中的所有模板文本和非JSF标签必须位于JSF <f:verbatim> 核心标签之内。
所以,假定有下面的JSP页面的代码片断:
<f:view>
…
<jsp:include page=”foo.jsp”/>
…
</f:view>
而foo.jsp可能是这样的:
<f:subview>
<h:outputText value=”heyah!”/>
…
<f:verbatim>
<b>Templaate text.</b>
<customtag:dothis/>
</f:verbatim>
</f:subview>
可以看到,整个被包含页面被封装在<f:subview>标签中,并且所有的非JSF标签和模板文本封装在<f:verbatim>标签中。另外,也可以将<f:subview>标签移到第一个页面,围绕在<jsp:include>标签之外。
使用静态包含要更简单些。无特别的限制—甚至并不非要使用<f:subview>标签。