為開(kāi)發(fā)JSF應(yīng)用,需要一個(gè)JSF實(shí)現(xiàn)。參考實(shí)現(xiàn)(RI)是所有其它實(shí)現(xiàn)都要遵循的標(biāo)準(zhǔn)。

 

所有JSF應(yīng)用都必須的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應(yīng)用的配置參數(shù):

Context參數(shù)

說(shuō)明

默認(rèn)

javax.faces.CONFIG_FILES

逗號(hào)分隔的上下文相關(guān)的資源路徑列表,JSF將在裝載WEB-INF/faces-config.xml之前載入這些資源

無(wú)

java.faces.DEFAULT_SUFFIX

當(dāng)使用擴(kuò)展名映射(后綴映射如*.faces)時(shí),所使用資源的默認(rèn)后綴

.jsp

java.faces.LIFECYCLE_ID

當(dāng)在這個(gè)應(yīng)用中處理JSF請(qǐng)求時(shí),所使用的生命周期實(shí)例的標(biāo)識(shí)符

默認(rèn)的生命周期模型

javax.faces.STATE_SAVING_METHOD

指示在客戶端(client)還是在服務(wù)器端(server)保存UI組件的狀態(tài)

server

 

RI特定的配置參數(shù):

Context參數(shù)

說(shuō)明

默認(rèn)

com.sun.faces.NUMBER_OF_VIEWS_IN_SESSION

當(dāng)狀態(tài)保存方法設(shè)置為server時(shí),控制會(huì)話中保存的視圖數(shù)量

無(wú)

com.sun.faces.validateXml

告訴JSF根據(jù)DTD驗(yàn)證配置文件

false

com.sun.faces.verifyObjects

告訴JSF驗(yàn)證其可以創(chuàng)建應(yīng)用對(duì)象(組件,呈現(xiàn)器,轉(zhuǎn)換器等)

false

 

MyFaces特定的配置參數(shù):

Context參數(shù)

說(shuō)明

默認(rèn)

myfaces_allow_javascript

True,如果組件允許JavaScript

true

myfaces_pretty_html

指定顯示的HTML是否進(jìn)行格式化,以便它是“人可讀的”(給輸出附加的不影響HTML代碼的行分隔符和空格)

true

myfaces_allow_designmode

使用CGLib字節(jié)碼類修改的實(shí)現(xiàn)設(shè)計(jì)模式

false

 

JSF應(yīng)用配置總體分為三種:分別針對(duì)日常應(yīng)用開(kāi)發(fā),UI擴(kuò)展開(kāi)發(fā)(編寫組件,呈現(xiàn)器,轉(zhuǎn)換器或者驗(yàn)證器)和高級(jí)開(kāi)發(fā)。

 

faces-config.xml中三類主要配置類別以及對(duì)應(yīng)的XML元素(頂層根元素<faces-config>)

類別

特征

XML元素

日常應(yīng)用配置和高級(jí)擴(kuò)展的注冊(cè)

應(yīng)用配置。用于指定支持的語(yǔ)言,定制應(yīng)用消息的位置,默認(rèn)的呈現(xiàn)包,以及高級(jí)的可插入組件

<application>

受管bean創(chuàng)建工具。

<managed-bean>

控制在特定范圍的對(duì)象的自動(dòng)創(chuàng)建被引用的bean

<referenced-bean>

用來(lái)告訴IDE其它可以訪問(wèn)的對(duì)象的導(dǎo)航規(guī)則,控制一個(gè)頁(yè)面到另一個(gè)頁(yè)面的應(yīng)用流

<navigation-rule>

用戶界面擴(kuò)展注冊(cè)

組件注冊(cè)。用于向系統(tǒng)注冊(cè)組件

<component>

呈現(xiàn)包和呈現(xiàn)器注冊(cè)。用于向呈現(xiàn)包添加呈現(xiàn)器或者定義整個(gè)新的呈現(xiàn)包

<render-kit>

驗(yàn)證器注冊(cè)。用于向系統(tǒng)注冊(cè)驗(yàn)證器

<validator>

轉(zhuǎn)換器注冊(cè)。用于向系統(tǒng)注冊(cè)轉(zhuǎn)換器

<converter>

高級(jí)擴(kuò)展特征的配置

階段監(jiān)聽(tīng)器注冊(cè)。向系統(tǒng)注冊(cè)階段監(jiān)聽(tīng)器

<phase-listener>

工廠配置。定義實(shí)例化核心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>

    <!— 場(chǎng)所有消息資源束 -->

    <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>

    <!— 定制驗(yàn)證器 -->

    <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>

    <!— 定制轉(zhuǎn)換器 -->

    <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>

    <!-- 導(dǎo)航規(guī)則 -->

    <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定制標(biāo)簽庫(kù):

URI

名稱

通用前綴

說(shuō)明

http://java.sun.com/jsf/core

Core

f

包含獨(dú)立于特定呈現(xiàn)器的標(biāo)簽(如<f:view>,<validator>等等)

http://java.sun.com/jsf/html

HTML

h

包含所有標(biāo)準(zhǔn)組件和HTML呈現(xiàn)包

 

JSF支持兩種包含。對(duì)動(dòng)態(tài)包含,有兩個(gè)要求:

1.     被包含頁(yè)面必須封裝在JSF <f:subview> 核心標(biāo)簽中。這個(gè)標(biāo)簽可以位于被包含頁(yè)面中也可以圍繞包含語(yǔ)句;

2.     被包含頁(yè)面中的所有模板文本和非JSF標(biāo)簽必須位于JSF <f:verbatim> 核心標(biāo)簽之內(nèi)。

所以,假定有下面的JSP頁(yè)面的代碼片斷:

<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>

可以看到,整個(gè)被包含頁(yè)面被封裝在<f:subview>標(biāo)簽中,并且所有的非JSF標(biāo)簽和模板文本封裝在<f:verbatim>標(biāo)簽中。另外,也可以將<f:subview>標(biāo)簽移到第一個(gè)頁(yè)面,圍繞在<jsp:include>標(biāo)簽之外。

使用靜態(tài)包含要更簡(jiǎn)單些。無(wú)特別的限制甚至并不非要使用<f:subview>標(biāo)簽。