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