為開發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=”
<!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>等等) |
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>標簽。