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