为开发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>标签。