Java Server Faces(JSF)技術(shù)為開(kāi)發(fā)基于網(wǎng)絡(luò )用戶(hù)界面的Java開(kāi)發(fā)者提供了標準的編程接口A(yíng)PI以及標記庫。Apache Struts框架的作者Craig McClanahan,協(xié)助領(lǐng)導了Sun公司的JSF項目。這使項目能夠容易的從流行的Apache向JSF標準移植得到了保證。就像Struts框架一樣,JSF定義了一套JSP標記,能夠生成與JavaBean屬性綁定在一起的HTML表單元素。從應用開(kāi)發(fā)者的角度看,兩種框架是很相似的,但是JSF可能將會(huì )得到更多的支持。因為JSF是Java的標準。在未來(lái)的發(fā)展中,有可能所有的J2EE應用服務(wù)器都需要支持JSF(Java Server Faces)。
Sun公司在已經(jīng)發(fā)布的免費下載開(kāi)發(fā)包Java Web Services Developer Pack 1.2 (http://java.sun.com/webservices/downloads/webservicespack.html)中,包括了JSF詳細說(shuō)明(JSF Specification Version 1.0, Public Review Draft 2)的參考實(shí)現(Early Access 4 — EA4)。EA4版本實(shí)現了許多新特性:動(dòng)作、beans管理和導航規則。本文將集中介紹這些新特性以及展示如何從JSF的開(kāi)發(fā)中得到好處以便建立表單,確認用戶(hù)輸入以及將用戶(hù)界面組件與JavaBean屬性綁定起來(lái)。
本文包含一個(gè)由四個(gè)主要部分組成的網(wǎng)絡(luò )應用:
1. JavaBean類(lèi)(PBean.java),作為數據模型保存一些文本以及相關(guān)屬性:字體、大小、 顏色、擺放位置等;
2. 基于JSF的表單(edit.jsp),使用戶(hù)可以為JavaBean的屬性賦值;
3. Java類(lèi)(PBuilder.java),用給定的文本按照其屬性值生成HTML頁(yè)面程序;
4. JSP頁(yè)面(view.jsp),顯示生成的HTML頁(yè)面。
注:
源代碼下載地址:http://www.onjava.com/onjava/2003/09/03/examples/usingjsf-src.zip
相關(guān)文檔
原文:Introducing JavaServer Faces(http://www.onjava.com/pub/a/onjava/2003/07/30/jsf_intro.html)
譯文:http://www.matrix.org.cn/forum_view.asp?forum_id=14&view_id=658
JavaServer Faces(或者叫JSF)是服務(wù)端程序開(kāi)發(fā)新的發(fā)展趨勢。它可以使你更輕松的的設計程序,你的程序也能夠更容易維護,甚至可能還會(huì )使你的工作更有趣。Budi Kurniawan向我們展示了JSF技術(shù),解釋了為什么JSF如此有用以及它是否實(shí)現了所承諾的功能。
圖1:基于JSF的表單
制作JSF表單 當你開(kāi)發(fā)網(wǎng)絡(luò )應用時(shí),處理HTML表單是最常見(jiàn)的一項任務(wù)。一個(gè)好的框架能夠節省很多開(kāi)發(fā)時(shí)間,因為許多日常的程序操作可以自動(dòng)的完成或是減少到最低限度只需要在XML文件中用幾行完成。這也有可能簡(jiǎn)化使用JSP標記庫的網(wǎng)絡(luò )開(kāi)發(fā)。Java Server Faces框架提供了JSP標記,用于描述表單、管理表單狀態(tài)、確認用戶(hù)輸入以及報錯、將用戶(hù)界面組件與JavaBean屬性綁定在一起以及其他許多可提高開(kāi)發(fā)效率的功能。JSF也有豐富的編程接口可用于建立定制的用戶(hù)界面(UI)組件,定制驗證類(lèi)(驗證器validator)以及服務(wù)端的事件監聽(tīng)器。
JSF包含兩類(lèi)標記庫分別叫JSF核心庫與HTML基礎庫。前者提供普通的標記和一些用于在用戶(hù)界面組件中注冊驗證器以及事件監聽(tīng)器的標記。后者包含用于描述用戶(hù)界面組件的JSP標記,如:按鈕、文本域、復選按鈕、列表等。文件edit.jsp用這些標記建立了表單。兩種標記庫的標準前綴是f和h,并且定義在edit.jsp文件的最前面:
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<f:use_faces>標記是容器標記,必須包含所有在同一頁(yè)面中出現的JSF標記。該標記不會(huì )產(chǎn)生任何HTML內容,但是它會(huì )觸發(fā)JSF的內部機制。<h:form>標記產(chǎn)生能夠包含用戶(hù)界面元素的HTML元素<form>。
<html>
<head>
<title>Edit</title>
</head>
<body>
<f:use_faces>
<h:form formName="pform">
..........
</h:form>
</f:use_faces>
</body>
</html>
上面的JSP代碼生成下面的HTML片斷:
<html>
<head>
<title>Edit</title>
</head>
<body>
<form method="post" action="/usingjsf/faces/edit.jsp">
..........
</form>
</body>
</html>
下一部分介紹應用的JavaBean模型。
管理Bean 像其他一些Web框架一樣,JSF將用戶(hù)界面從封裝數據以及應用邏輯的對象模型中分離出來(lái)。當HTML用戶(hù)界面由JSF標記產(chǎn)生時(shí),JSF框架從JavaBean模型獲得數據并設置HTML表單用戶(hù)界面組件的屬性狀態(tài)。用戶(hù)提交表單時(shí),JSF驗證用戶(hù)輸入,如果全部正常JSF就將用戶(hù)輸入保存到JavaBean模型并且HTTP請求會(huì )根據“導航規則”進(jìn)入下一頁(yè)面。如果驗證出現錯誤,JSF回到表單并返回錯誤信息,這樣用戶(hù)就可以糾正錯誤輸入。
類(lèi)Pbean遵循JavaBean規范,實(shí)現了java.io.Serializable并為其屬性(文本、大小、字體、顏色、擺放位置、粗體、斜體、下劃線(xiàn))提供了相應的get及set方法。JSF每一個(gè)應用的用戶(hù)都創(chuàng )建了一個(gè)PBean的實(shí)例,該實(shí)例存儲在JSP的會(huì )話(huà)(session)中并在名為faces-config.xml的XML格式配置文件中指定ID。JSF也會(huì )根據faces-config.xml文件提供的數據初始化JavaBean實(shí)例的屬性值。該XML文件還可能包含其他JSF配置參數,如:導航規則,我們將在后面的章節介紹。
下面的XML程序片斷包含由JSF所管理的JavaBean的聲明:
<?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>
..........
<managed-bean>
<managed-bean-name>pbean</managed-bean-name>
<managed-bean-class>
com.devsphere.articles.usingjsf.PBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>text</property-name>
<null-value/>
</managed-property>
<managed-property>
<property-name>size</property-name>
<value>3</value>
</managed-property>
<managed-property>
<property-name>font</property-name>
<values>
<value>Arial</value>
<value>Courier New</value>
</values>
</managed-property>
<managed-property>
<property-name>color</property-name>
<value>green</value>
</managed-property>
<managed-property>
<property-name>align</property-name>
<value>left</value>
</managed-property>
<managed-property>
<property-name>bold</property-name>
<value>false</value>
</managed-property>
<managed-property>
<property-name>italic</property-name>
<value>true</value>
</managed-property>
<managed-property>
<property-name>underline</property-name>
<value>false</value>
</managed-property>
</managed-bean>
</faces-config>
由JSF創(chuàng )建的管理bean能夠根據<managed-bean-scope>元素的值而存儲在請求(request)、會(huì )話(huà)(session)或應用的范圍內。<managed-bean-scope>元素的值可為空值。如果一個(gè)對象已經(jīng)指定了ID并注冊在給定的范圍內那么JSF不會(huì )建立JavaBean實(shí)例。