為開(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)簽。