為開發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>標簽。