JAVA教程之JSF開發(fā)(一)
Java Server Faces(JSF)技術(shù)為開發(fā)基于網(wǎng)絡用戶界面的Java開發(fā)者提供了標準的編程接口API以及標記庫。Apache Struts框架的作者Craig McClanahan,協(xié)助領(lǐng)導了Sun公司的JSF項目。這使項目能夠容易的從流行的Apache向JSF標準移植得到了保證。就像Struts框架一樣,JSF定義了一套JSP標記,能夠生成與JavaBean屬性綁定在一起的HTML表單元素。
從應用開發(fā)者的角度看,兩種框架是很相似的,但是JSF可能將會得到更多的支持。因為JSF是Java的標準。在未來的發(fā)展中,有可能所有的J2EE應用服務器都需要支持JSF(Java Server Faces)。
本文包含一個由四個主要部分組成的網(wǎng)絡應用:
1. JavaBean類(PBean.java),作為數(shù)據(jù)模型保存一些文本以及相關(guān)屬性:字體、大小、 顏色、擺放位置等;
2. 基于JSF的表單(edit.jsp),使用戶可以為JavaBean的屬性賦值;
3. Java類(PBuilder.java),用給定的文本按照其屬性值生成HTML頁面程序;
4. JSP頁面(view.jsp),顯示生成的HTML頁面。
JavaServer Faces(或者叫JSF)是服務端程序開發(fā)新的發(fā)展趨勢。它可以使你更輕松的的設(shè)計程序,你的程序也能夠更容易維護,甚至可能還會使你的工作更有趣。Budi Kurniawan向我們展示了JSF技術(shù),解釋了為什么JSF如此有用以及它是否實現(xiàn)了所承諾的功能。
圖1:基于JSF的表單
制作JSF表單
當你開發(fā)網(wǎng)絡應用時,處理HTML表單是最常見的一項任務。一個好的框架能夠節(jié)省很多開發(fā)時間,因為許多日常的程序操作可以自動的完成或是減少到最低限度只需要在XML文件中用幾行完成。這也有可能簡化使用JSP標記庫的網(wǎng)絡開發(fā)。
Java Server Faces框架提供了JSP標記,用于描述表單、管理表單狀態(tài)、確認用戶輸入以及報錯、將用戶界面組件與JavaBean屬性綁定在一起以及其他許多可提高開發(fā)效率的功能。JSF也有豐富的編程接口可用于建立定制的用戶界面(UI)組件,定制驗證類(驗證器validator)以及服務端的事件監(jiān)聽器。
JSF包含兩類標記庫分別叫JSF核心庫與HTML基礎(chǔ)庫。前者提供普通的標記和一些用于在用戶界面組件中注冊驗證器以及事件監(jiān)聽器的標記。后者包含用于描述用戶界面組件的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>標記是容器標記,必須包含所有在同一頁面中出現(xiàn)的JSF標記。該標記不會產(chǎn)生任何HTML內(nèi)容,但是它會觸發(fā)JSF的內(nèi)部機制。<h:form>標記產(chǎn)生能夠包含用戶界面元素的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>
#p#
下一部分介紹應用的JavaBean模型。
管理Bean
像其他一些Web框架一樣,JSF將用戶界面從封裝數(shù)據(jù)以及應用邏輯的對象模型中分離出來。當HTML用戶界面由JSF標記產(chǎn)生時,JSF框架從JavaBean模型獲得數(shù)據(jù)并設(shè)置HTML表單用戶界面組件的屬性狀態(tài)。用戶提交表單時,JSF驗證用戶輸入,如果全部正常JSF就將用戶輸入保存到JavaBean模型并且HTTP請求會根據(jù)“導航規(guī)則”進入下一頁面。如果驗證出現(xiàn)錯誤,JSF回到表單并返回錯誤信息,這樣用戶就可以糾正錯誤輸入。
類Pbean遵循JavaBean規(guī)范,實現(xiàn)了java.io.Serializable并為其屬性(文本、大小、字體、顏色、擺放位置、粗體、斜體、下劃線)提供了相應的get及set方法。JSF每一個應用的用戶都創(chuàng)建了一個PBean的實例,該實例存儲在JSP的會話(session)中并在名為faces-config.xml的XML格式配置文件中指定ID。JSF也會根據(jù)faces-config.xml文件提供的數(shù)據(jù)初始化JavaBean實例的屬性值。該XML文件還可能包含其他JSF配置參數(shù),如:導航規(guī)則。
下面的XML程序片斷包含由JSF所管理的JavaBean的聲明:
- <?xml version="1.0"?>
- <!DOCTYPE faces-config PUBLIC
- "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
- "http://java.suncom/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能夠根據(jù)<managed-bean-scope>元素的值而存儲在請求(request)、會話(session)或應用的范圍內(nèi)。<managed-bean-scope>元素的值可為空值。如果一個對象已經(jīng)指定了ID并注冊在給定的范圍內(nèi)那么JSF不會建立JavaBean實例。
注:
源代碼下載地址: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
【編輯推薦】