JSF在Web開發(fā)中的應(yīng)用_第1頁
JSF在Web開發(fā)中的應(yīng)用_第2頁
JSF在Web開發(fā)中的應(yīng)用_第3頁
JSF在Web開發(fā)中的應(yīng)用_第4頁
JSF在Web開發(fā)中的應(yīng)用_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第三章JSF入門Email:lihonglhl@163.com

信息類專業(yè)課程西北農(nóng)林科技大學(xué)1精選2021版課件主要內(nèi)容JSF簡介JSF入門JSF標(biāo)簽JSF開發(fā)環(huán)境2精選2021版課件Web開發(fā)技術(shù)Web架構(gòu)用超文本技術(shù)(HTML)實現(xiàn)信息與信息的連接;用統(tǒng)一資源定位技術(shù)(URI)實現(xiàn)全球信息的精確定位;用新的應(yīng)用層協(xié)議(HTTP)實現(xiàn)分布式的信息共享。靜態(tài)動態(tài)客戶端技術(shù)HTML、JavaApplets、JavaScript、ActiveX、CSS、DHTML、XHTML服務(wù)端技術(shù)CGI(CommonGatewayInterface)C、C++、PascalPerl、PythonPHP、ASP、Servlet(JSP)+JavaBean3精選2021版課件最新發(fā)展JavaWeb框架Struts、SpringMVC、WebWork、TapestryJSFAJAX(AsynchronousJavaScriptandXML)XHTML和CSS的標(biāo)準表示;使用文檔對象模型DOM實現(xiàn)動態(tài)顯示及用戶交互;使用XML、XSLT和XMLHttpRequest進行數(shù)據(jù)交換及操作;使用javascript將所有技術(shù)綁定在一起。AgileWebRubyonRailsPython(Django、TurboGears、Pylons)4精選2021版課件二、JSF簡介什么是JSFJSF的特性JSF與其它框架的比較JSF實現(xiàn)JSF示例5精選2021版課件什么是JSFJavaServerFaces(JSF):符合JavaEE5標(biāo)準的JavaWeb應(yīng)用框架。目標(biāo):簡化開發(fā)。JSF提供:標(biāo)準的編程接口豐富可擴展的組件庫一個核心的JSP標(biāo)記庫用來處理事件、執(zhí)行驗證以及其他非UI相關(guān)的操作(core)一個標(biāo)準的HTML標(biāo)記庫來表示UI組件(html)事件驅(qū)動模型JSF通過IDE工具支持拖放式開發(fā)。6精選2021版課件JSF的由來和目標(biāo)由來EJB2的失敗非官方Web框架的興起目標(biāo)簡化開發(fā)超越現(xiàn)有Web框架試圖在不同的角度上提供網(wǎng)頁設(shè)計人員、應(yīng)用程序設(shè)計人員、組件開發(fā)人員解決方案,讓不同技術(shù)的人員可以彼此合作又不互相干擾7精選2021版課件JSF體系結(jié)構(gòu)JSF的主要優(yōu)勢之一就是它既是JavaWeb用戶界面標(biāo)準又是嚴格遵循模型-視圖-控制器(MVC)設(shè)計模式的框架。用戶界面代碼(視圖)與應(yīng)用程序數(shù)據(jù)和邏輯(模型)的清晰分離使JSF應(yīng)用程序更易于管理。為了準備提供頁面對應(yīng)用程序數(shù)據(jù)訪問的JSF上下文和防止對頁面未授權(quán)或不正確的訪問,所有與應(yīng)用程序的用戶交互均由一個前端“Faces”servlet(控制器)來處理。8精選2021版課件JSF的特性技術(shù)特性一流的UI組件和事件模型POJO依賴注入(又稱控制反轉(zhuǎn))客戶端獨立性

使用或者不使用工具可擴展的導(dǎo)航(類似于Struts導(dǎo)航,注:Page導(dǎo)航)強大的擴展能力(如Shale)

完全的集成(如集成Spring、JPA)本地化和易理解性9精選2021版課件JSF的特性市場和商業(yè)特性廣泛的采用,包括SUN,Oracle,IBM,BEA,Apache,EDS作為JavaEE5.0的組成部分大型第三方組件市場(iLog,BusinessObjects,Oracle,Sun,IBM)業(yè)內(nèi)領(lǐng)先的工具支持(SunJavaStudioCreator,NetBeans,OracleJDeveloper,IBMWSAD,BEAWorkshop,ExadelStudio)10精選2021版課件與其它框架的比較(來自TSS)技術(shù)特性商業(yè)使用JSF4.83.9WebWork4.23.1Shale4.951.3Tapestry4.752.8Wicket--0.7Struts4.24.611精選2021版課件JSF的優(yōu)勢UI組件(UI-component)事件驅(qū)動模式用戶界面到業(yè)務(wù)邏輯的直接映射程序員和網(wǎng)頁設(shè)計人員的分工請求處理生命周期的多階段劃分全面的用戶自定義支持Web開發(fā)的官方標(biāo)準之一大量的IDE工具支持

12精選2021版課件JSF實現(xiàn)JSF是標(biāo)準實現(xiàn)SunJSFRIApacheMyFaces組件庫TomahawkADFFaces(fromOracle)Tobago13精選2021版課件JSF示例<%@tagliburi="/jsf/core"prefix="f"%><%@tagliburi="/jsf/html"prefix="h"%><%@pagecontentType="text/html;charset=GB2312"%><html><head> <title>第一個JSF程序</title></head><body><f:view><h:form><h3>請輸入您的名稱</h3> 名稱:<h:inputTextvalue="#{}"/><p> <h:commandButtonvalue=“提交"action="login"/> </h:form></f:view></body></html>14精選2021版課件二、JSF入門第一個JSF程序JSFExpressionLanguage國際化(I18N)ManagedBeans數(shù)據(jù)轉(zhuǎn)換與驗證事件處理15精選2021版課件第一個JSF程序JSF開發(fā)環(huán)境EclipseWTPJSF插件JSF實現(xiàn)(MyFaces)TomcatManaged-BeanJSP頁面PagesNavigation16精選2021版課件JSF應(yīng)用一:輸入頁面<!--開始使用JSF的視圖輸出--><f:view><!--輸出國際化資源文件中的國際化信息--><h:outputTextvalue="#{msg.loginHeader}"/><!--輸出loginBean的err屬性--><b><h:outputTextvalue="#{login.err}"/></b><h:formid="loginForm"> <!--輸出國際化資源文件中的國際化信息--> <h:outputTextvalue="#{Prompt}"/> <!--將下面單行輸入框的值綁定到loginBean的name屬性--> <h:inputTextvalue="#{}"/><br/> <!--輸出國際化資源文件中的國際化信息--> <h:outputTextvalue="#{msg.passPrompt}"/> <!--將下面單行輸入框的值綁定到loginBean的pass屬性--> <h:inputTextid="pass"value="#{login.pass}"/><br/> <!--將下面按鈕的動作綁定到loginBean的valid方法--> <h:commandButtonaction="#{login.valid}“value="#{msg.buttonTitle}"/></h:form></f:view>17精選2021版課件f:loadBundlebasename="messages"var="msg"/>用于臨時加載國際化資源的語言包<h:outputTextvalue="#{Prompt}"/>輸出指定key對應(yīng)的國際化消息JSF應(yīng)用一:輸入頁面18精選2021版課件JSF應(yīng)用二:開發(fā)托管Bean從作用上看托管Bean類似struts2的Action,但作用模式不同。對于struts2的Action而言,應(yīng)用通過表單提交方式把請求提交到struts2的Action;但JSF的托管Bean,系統(tǒng)直接將JSF中的UI組件的行為綁定到托管Bean的屬性或方法。如:

<h:inputTextvalue="#{}"/>

該文本框的行為綁定到loginBean的name屬性。<h:commandButtonaction="#{login.valid}“value="#{msg.buttonTitle}"/>

該按鈕的行為直接綁定到loginBean的valid方法上19精選2021版課件JSF應(yīng)用二:開發(fā)托管Beanpublic

classLoginBean{//下面的三個屬性都會直接與JSF標(biāo)簽綁定privateStringname;privateStringpass;privateStringerr;...//該方法被綁定到UI組件(按鈕)的action屬性publicStringvalid(){if(name.equals("crazyit")&&pass.equals("leegang")){return"success";}setErr("您的用戶名和密碼不符合");return"failure";}}20精選2021版課件JSF應(yīng)用三:定義導(dǎo)航規(guī)則

JSF以導(dǎo)航規(guī)則來決定邏輯視圖與物理視圖資源之間的對應(yīng)關(guān)系;

JSF導(dǎo)航規(guī)則可以指定系統(tǒng)從哪個頁面開始,以該頁面的提交按鈕綁定的值作為 邏輯視圖;

JSF使用標(biāo)準的配置文件定義導(dǎo)航規(guī)則;

JSF允許每個表單域單獨觸發(fā)事件,JSF常用的兩類事件:

ValueChange事件:表單域的值發(fā)生改變時觸發(fā)該事件;

Action事件:用戶單擊按鈕或超鏈接時觸發(fā)這類事件。

21精選2021版課件JSF應(yīng)用三:定義導(dǎo)航規(guī)則<?xmlversion="1.0"encoding="GBK"?><!--JSF配置文件的根元素,并指定Schema信息--><faces-configxmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-facesconfig_1_2.xsd“version="1.2"><navigation-rule><!--導(dǎo)航規(guī)則的輸入頁面--><from-view-id>/login.jsp</from-view-id><!--如果login.jsp中Action方法的處理結(jié)果是success,則跳轉(zhuǎn)到視圖頁greeting.jsp--><navigation-case><from-outcome>success</from-outcome><to-view-id>/greeting.jsp</to-view-id></navigation-case><!--如果login.jsp中Action方法的處理結(jié)果是failure,則跳轉(zhuǎn)到視圖頁login.jsp--><navigation-case><from-outcome>failure</from-outcome><to-view-id>/login.jsp</to-view-id></navigation-case></navigation-rule></faces-config>faces-config-nav.xml22精選2021版課件JSF應(yīng)用四:解讀JSF配置對于大部分JSF初級開發(fā)者而言,常作的兩件事是:定義托管Bean,配置XML文件。配置核心控制器

Web應(yīng)用基本上是請求--響應(yīng)架構(gòu),即:用戶向Web應(yīng)用發(fā)請求,Web應(yīng)用處理請求,處理完成后將請求送回客戶端。

JSF與傳統(tǒng)的MVC框架一樣,,也提供了一個核心控制器負責(zé)處理所有用戶請求,即javax.faces.webapp.FacesServlet,它就是JSF的核心控制器。

FacesServlet是一個標(biāo)準的Servlet,因此,它的配置與普通Servlet沒有太大區(qū)別,同樣是先配置Servlet,再配置Servlet映射的URL,配置文件時web.xml。23精選2021版課件JSF應(yīng)用四:解讀JSF配置<!--配置JSF的核心控制器:FacesServlet--><servlet> <servlet-name>FacesServlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup></servlet><!--配置JSF核心FacesServlet的映射--><servlet-mapping> <servlet-name>FacesServlet</servlet-name> <url-pattern>*.jsf</url-pattern></servlet-mapping>配置FacesServlet的代碼片段如下:上面配置片段指定使用FacesServlet來攔截所有已.jsf結(jié)尾的請求,值得注意的是FacesServlet攔截的URL不一定是*.jsf,完全可以有用戶隨意指定。如:*.faces、*.do等。24精選2021版課件JSF應(yīng)用四:解讀JSF配置<context-param><param-name>javax.faces.CONFIG_FILES</param-name><!--多個配置文件之間以“,”隔開--><param-value>/WEB-INF/faces-config-beans.xml,/WEB-INF/faces-config-nav.xml</param-value></context-param><!--配置JSF程序狀態(tài)的保存位置--><context-param><param-name>javax.faces.STATE_SAVING_METHOD</param-name><!--將程序狀態(tài)保存在客戶端--><param-value>client</param-value></context-param><context-param></param-name>:為整個web用于配置參數(shù)25精選2021版課件JSF應(yīng)用四:解讀JSF配置JSF有效參數(shù)名及其作用如下:

javax.faces.STATE_SAVING_METHOD:指示是在客戶端(client)還是在服務(wù) 器端(server)保存UI組件的狀態(tài)。JSF有保存頁面中組件狀態(tài)的能力,以便 在頁面被重新顯示時記住用戶輸入的信息。組件狀態(tài)可以保存在客戶端也可保 存在服務(wù)器端,這取決于javax.faces.STATE_SAVING_METHOD

參數(shù)的設(shè)置值。 可能的取值是client和server(默認值)。

javax.faces.DEFAULT_SUFFIX:該參數(shù)指定JSF映射視圖資源時的默認后綴 名,默認值是.jsp,不需要改變參數(shù)的值。26精選2021版課件JSF應(yīng)用四:解讀JSF配置

javax.faces.CONFIG_FILES:該參數(shù)指定JSF配置文件的存放位置。默認情 況下JSF會自動加載位于WEB_INF下的faces-config.xml文件。如果包含多個 JSF配置文件,則需要指定該參數(shù),通過逗號分割不同的(相對路徑)配置文 件;如果只有一個JSF配置文件,且文件為位于WEB_INF下的faces-config.xml, 則可以省略該參數(shù)。

javax.faces.LIFECYCLE_ID:該參數(shù)指定JSF所管理的生命周期實例的標(biāo)識 符,該參數(shù)通常無需修改。27精選2021版課件JSF應(yīng)用四:解讀JSF配置

com.sun.faces.verifyObjects:該參數(shù)用于指定是否需要驗證自定義組件。 當(dāng)JSF應(yīng)用中定義了自定義組件、轉(zhuǎn)換器、校驗器時,可以設(shè)置應(yīng)用啟動時驗 證這些自定義組件。該參數(shù)的值只能是true或false。

com.sun.faces.validateXml:該參數(shù)指定是否需要驗證JSF應(yīng)用中的xml文件。

com.sun.faces.NUMBER_OF_VIEWS_IN_SESSON:當(dāng)狀態(tài)保存方法設(shè)置為server 時,控制會話中保存的視圖數(shù)量,當(dāng)設(shè)置為-1時表示沒有限制。28精選2021版課件JSF配置文件結(jié)構(gòu)JSF配置文件根元素都是<faces-config...>元素,JSF應(yīng)用配置總體分為三種:分別針對日常應(yīng)用開發(fā),UI擴展開發(fā)(編寫組件,呈現(xiàn)器,轉(zhuǎn)換器或者驗證器)和高級開發(fā)。最常見的兩個元素是:

<managed-bean…/>:JSF應(yīng)用中所有托管Bean都在該元素下配置、管理。

<navigation-rule…/>:該元素用于管理JSF應(yīng)用的導(dǎo)航規(guī)則。

29精選2021版課件類別特征XML元素日常應(yīng)用配置和高級擴展的注冊應(yīng)用配置。用于指定支持的語言,定制應(yīng)用消息的位置,默認的呈現(xiàn)包,以及高級的可插入組件<application>受管bean創(chuàng)建工具。<managed-bean>控制在特定范圍的對象的自動創(chuàng)建被引用的bean<referenced-bean>用來告訴IDE其它可以訪問的對象的導(dǎo)航規(guī)則,控制一個頁面到另一個頁面的應(yīng)用流<navigation-rule>用戶界面擴展注冊組件注冊。用于向系統(tǒng)注冊組件<component>呈現(xiàn)包和呈現(xiàn)器注冊。用于向呈現(xiàn)包添加呈現(xiàn)器或者定義整個新的呈現(xiàn)包<render-kit>驗證器注冊。用于向系統(tǒng)注冊驗證器<validator>轉(zhuǎn)換器注冊。用于向系統(tǒng)注冊轉(zhuǎn)換器<converter>高級擴展特征的配置階段監(jiān)聽器注冊。向系統(tǒng)注冊階段監(jiān)聽器<phase-listener>工廠配置。定義實例化核心JSF類的工廠<factory>JSF配置文件結(jié)構(gòu)30精選2021版課件三、JSFExpressionLanguage搭配JSF標(biāo)簽來使用,是用來存取數(shù)據(jù)對象的一個簡易語言。以#開始,將變量或運算式放置在{與}之間。#{userB}EL的變量名也可以程序執(zhí)行過程中所聲明的名稱,或是JSFEL預(yù)定義的隱含對象。#{}對于Map類型對象,可以使用‘.’運算符指定key值來取出對應(yīng)的value,也可以使用[與]來指定。#{param['name']}#{someBean.someMap[]}如果變量是List類型或陣列的話,則可以在[]中指定索引。#{someBean.someList[0]}31精選2021版課件也可以指定字面常數(shù),對于true、false、字符串、數(shù)字,JSFEL會嘗試進行轉(zhuǎn)換。<h:outputTextvalue="#{true}"/><h:outputTextvalue=“#{‘Thisisatest’}”/>在聲明變量名稱時,要留意不可與JSF的保留字或關(guān)鍵字同名。truefalsenulldivmodandornoteqneltgtlegeinstanceofempty在EL中可以直接進行一些算術(shù)運算、邏輯運算與關(guān)系運算。算術(shù)運算符:加法(+),減法(-),乘法(*),除法(/ordiv)與余除(%ormod)三元運算:(expression?result1:result2)邏輯運算:and(或&&)、or(或!!)、not(或!)關(guān)系運算:小于Less-than(<orlt)、大于Greater-than(>orgt)、小于或等于Less-than-or-equal(<=orle)、大于或等于Greater-than-or-equal(>=orge)、等于Equal(==oreq)、不等于NotEqual(!=orne)EL運算符的執(zhí)行優(yōu)先順序與Java運算符對應(yīng)三、JSFExpressionLanguage32精選2021版課件四、國際化信息JSF的國際化(Internationalization,簡寫I18N)信息處理是基于Java對國際化的支持,可以在一個信息資源文件中統(tǒng)一管理信息資源,資源文件的名稱是.properties,而內(nèi)容是名稱與值的配對。資源文件名稱由basename加上語言與地區(qū)來組成:

perties basename_perties basename_zh_CN.properties信息資源文件必須是ISO-8859-1編碼,所以對于非西方語系的處理,必須先將之轉(zhuǎn)換為JavaUnicodeEscape格式:

nameText=名稱nameText=\u540d\u79f0

使用<f:loadBundle>標(biāo)簽來指定載入信息資源: <f:loadBundlebasename="messages"var="msgs"/> <h:outputTextvalue="#{Text}"/>33精選2021版課件<f:view>可以設(shè)定locale屬性,直接指定所要使用的語系: <f:viewlocale="zh_CN"> <f:loadBundlebasename="messages"var="msgs"/>也可以在faces-config.xml中設(shè)定語系: <faces-config><application> <local-config> <default-locale>zh_CN</default-locale> <supported-locale>en</supported-locale> </local-config></application>

</faces-config>

甚至可以讓使用者選擇自己的語系: <f:viewlocale="#{user.locale}"> <f:loadBundlebasename="messages"var="msgs"/> <h:selectOneRadiovalue="#{user.locale}"> <f:selectItemitemValue="zh_CN"itemLabel="#{msgs.zh_CNText}"/><f:selectItemitemValue="en"itemLabel="#{msgs.enText}"/></h:selectOneRadio></f:view>四、國際化信息34精選2021版課件五、ManagedBeansJSF使用Bean來達到邏輯層與表現(xiàn)層分離的目的,Bean的管理集中在配置文件中,只要修改配置文件,就可以修改Bean之間的相依關(guān)系。BackingBean,GlueBean:在真正的業(yè)務(wù)邏輯Bean及UI組件之間搭起橋梁,在BackingBean中會呼叫業(yè)務(wù)邏輯Bean處理使用者的請求,或者是將業(yè)務(wù)處理結(jié)果放置其中,等待UI組件取出當(dāng)中的值并顯示結(jié)果給使用者。35精選2021版課件五、ManagedBeans在faces-config.xml中集中管理作用域:application:一直存活session:會話過程request:請求階段none:需要時,臨時36精選2021版課件Managed-Bean類型簡稱典型的有效域ModelManaged-Beanmodel-beansession描述:這種類型的Managed-Bean充當(dāng)MVC設(shè)計模式中的"模型(Model)"部分。當(dāng)你看到"模型"一詞————可以把它想象為"數(shù)據(jù)"。一個JSF的model-bean應(yīng)該是一個遵循JavaBean規(guī)范的,以getter/setter方式封裝了各種屬性的普通JAVA對象。model-bean最常見的使用場景是作為一個數(shù)據(jù)庫實體,或簡單地代表了數(shù)據(jù)庫查詢結(jié)果集中的一系列行數(shù)據(jù)。BackingManaged-Beanbacking-beanrequest描述:這種類型的Managed-Bean充當(dāng)MVC設(shè)計模式中的"視圖(View)"部分。backing-bean的目的是支持UI邏輯,(通常)與一個JSF視圖或Facelet聚合中的JSF表單保持一一對應(yīng)的關(guān)系。雖然它通常具有一些遵循JavaBean風(fēng)格并關(guān)聯(lián)了getter/setter的屬性,但這些屬性是對應(yīng)"視圖"中的值,而不對應(yīng)底層的應(yīng)用數(shù)據(jù)模型。JSF的backing-bean可以具有JSF的actionListener和valueChangeListener方法。ControllerManaged-Beancontroller-beanrequest描述:這種類型的Managed-Bean充當(dāng)MVC設(shè)計模式中的"控制器(Controller)"部分。controllerbean的目的是執(zhí)行某些業(yè)務(wù)邏輯并返回一個導(dǎo)航結(jié)果給JSF的導(dǎo)航處理器。JSFcontroller-bean通常具有JSF的action方法(而不是actionListener方法)SupportManaged-Beansupport-beansession/application描述:這種類型的bean為MVC設(shè)計模式中的"視圖(View)"部分中的一個或多個視圖提供"支持"。典型的應(yīng)用場景是提供一個ArrayList<SelectItem>給JSF的h:selectOneMenu下拉列表,而且這個下拉列表將在多個JSF視圖中出現(xiàn)。如果這個下拉列表的數(shù)據(jù)是用戶特定的,那么這個bean就應(yīng)該放在session范圍中。但是,如果數(shù)據(jù)是提供給所有用戶的(例如一個選擇省份的下拉列表),那么這個bean就應(yīng)該放在application范圍中。UtilityManaged-Beanutility-beanapplication描述:這種bean為一個或多個JSF視圖提供"工具"。例如一個能在多個Web應(yīng)用中復(fù)用的FileUploadbean。Managed-Bean類型37精選2021版課件Beans的配置與設(shè)定JSF預(yù)定義會讀取faces-config.xml中關(guān)于Bean的定義可在web.xml中利用javax.faces.CONFIG_FILES參數(shù)指定自定義文件:

<web-app> <context-param><param-name>javax.faces.CONFIG_FILES</param-name><param-value>/WEB-INF/beans.xml</param-value> </context-param>... </web-app>定義文件可以有多個,中間以“,”區(qū)隔:

/WEB-INF/navigation.xml,/WEB-INF/beans.xml38精選2021版課件Beans的配置與設(shè)定Bean的基本定義:名稱 <managed-bean-name>類 <managed-bean-class> 存活范圍 <managed-bean-scope>可選設(shè)置屬性的初始值 <managed-property><managed-property> <property-name>user</property-name> <value>#{user}</value></managed-property>39精選2021版課件Beans上的List

<managed-property><property-name>someProperty</property-name><list-entries><value-class>java.lang.Integer</value-class><value>1</value><value>2</value><value>3</value></list-entries></managed-property>

40精選2021版課件Beans上的Map<managed-property><property-name>someProperty</property-name><map-entries><value-class>java.lang.Integer</value-class><map-entry><key>someKey1</key><value>100</value></map-entry><map-entry><key>someKey2</key><value>200</value></map-entry></map-entries></managed-property>41精選2021版課件訪問ManagedBeans如果要在其它類中取得Bean對象,則可以先取得javax.faces.context.FacesContext,它代表了JSF目前的執(zhí)行環(huán)境對象,接著嘗試取得javax.faces.el.ValueBinding對象,從中取得指定的Bean對象:

FacesContextcontext=FacesContext.getCurrentInstance(); ValueBindingbinding=context.getApplication(). createValueBinding("#{user}"); UserBeanuser=(UserBean)binding.getValue(context);取得Bean的某個屬性:

FacesContextcontext=FacesContext.getCurrentInstance(); ValueBindingbinding=context.getApplication(). createValueBinding("#{}"); Stringname=(String)binding.getValue(context);

42精選2021版課件六、JSF標(biāo)簽標(biāo)準標(biāo)簽輸出類標(biāo)簽輸入類標(biāo)簽命令類標(biāo)簽選擇類標(biāo)簽其他標(biāo)簽表格處理43精選2021版課件JSF標(biāo)準標(biāo)簽輸出(Outputs)其名稱以output作為開頭,作用為輸出指定的信息或綁定值。輸入(Inputs)其名稱以input作為開頭,其作用為提供使用者輸入框。命令(Commands)其名稱以command作為開頭,其作用為提供命令或鏈接按鈕。選擇(Selections)其名稱以select作為開頭,其作用為提供使用者選項的選取。其它包括了form、message、messages、graphicImage等等未分類的標(biāo)簽。44精選2021版課件標(biāo)準HTML標(biāo)簽的屬性屬性名稱適用說明id所有組件可指定id名稱,以讓其它標(biāo)簽或組件參考binding所有組件綁定至UIComponentrendered所有組件是否顯示組件styleClass所有組件設(shè)定Cascadingstylesheet(CSS)value輸入、輸出、命令組件設(shè)定值或綁定至指定的值valueChangeListener輸入組件設(shè)定值變事件處理者converter輸入、輸出組件設(shè)定轉(zhuǎn)換器validator輸入組件設(shè)定驗證器required輸入組件是否驗證必填輸入框immediate輸入、命令組件是否為即時事件45精選2021版課件輸出類標(biāo)簽outputLabel產(chǎn)生<label>HTML標(biāo)簽,使用for屬性指定組件的clientID,例如: <h:inputTextid="user"value="#{}"/> <h:outputLabelfor="user"value="#{}"/>outputLink產(chǎn)生<a>HTML標(biāo)簽,搭配<f:param>可幫鏈結(jié)加上參數(shù),所有的參數(shù)都會變成name=value的類型附加在鏈接后,value所指定的內(nèi)容也可以是JSFEL綁定。例如: <h:outputLinkvalue=“../index.jsp”> <h:outputTextvalue=“LinktoIndex”/> <f:paramname=“name”value=“MyName”/> </h:outputLink>

outputFormat 產(chǎn)生指定的文字信息,可以搭配<f:param>來設(shè)定信息的參數(shù)以格式化文字信息,例如: <h:outputFormatvalue="{0},Yournameis{1}."> <f:paramvalue="Hello"/> <f:paramvalue="Guest"/> </h:outputFormat>outputText簡單的顯示指定的值或綁定的信息,例如:

<h:outputTextvalue="#{}"/>

46精選2021版課件輸入類標(biāo)簽inputText顯示單行輸入框,即輸出<input>HTML標(biāo)簽,其type屬性設(shè)定為text,例如:

<h:inputTextvalue="#{}"/>

inputTextarea 顯示多行輸入文字區(qū)域,即輸出<textarea>HTML標(biāo)簽,例如:

<h:inputTextareavalue="#{mand}"/>

inputSecret顯示密碼輸入框,即輸出<input>HTML標(biāo)簽,其type屬性設(shè)定為password,例如:

<h:inputSecretvalue="#{user.password}"/>

inputHidden隱藏輸入框,即輸出<input>HTML標(biāo)簽,其type屬性設(shè)定為hidden,隱藏輸入框的值用于保留一些信息于客戶端,以在下一次發(fā)送表單時一并提交,例如:

<h:inputHiddenvalue="#{user.hiddenInfo}"/>47精選2021版課件命令類標(biāo)簽commandButton 顯示一個命令按鈕,即輸出<input>HTML標(biāo)簽,其type屬性可以設(shè)定為button、submit或reset,預(yù)設(shè)是submit,按下按鈕會觸發(fā)javax.faces.event.ActionEvent,例如:

<h:commandButtonvalue="提交“ action="#{user.verify}"/>commandLink

產(chǎn)生超鏈接,會輸出<a>HTML標(biāo)簽,而href屬性會有‘#’,而onclick屬性會含有一段JavaScript程序,這個JavaScript的目的是按下鏈接后自動提交表單,具體來說其作用就像按鈕,但外觀卻是超鏈接,例如:

<h:commandLinkvalue="#{mandText}" action="#{user.verify}"/>

48精選2021版課件選擇類標(biāo)簽選取框<h:selectBooleanCheckbox>單選單選按鈕<h:selectOneRadio>單選列表<h:selectOneListbox>單選菜單<h:selectOneMenu>復(fù)選復(fù)選框<h:selectManyCheckbox>復(fù)選列表<h:selectManyListbox>復(fù)選菜單<h:selectManyMenu>49精選2021版課件選擇類標(biāo)簽的選項<f:selectItem>itemLabelitemValue或者value綁定一個傳回javax.faces.model.SelectItem的方法<f:selectItems>value綁定至一個提供傳回SelectItem的列表(數(shù)組)的方法 SelectItem:value,labelvalue綁定至一個提供傳回Map對象的方法 Map:label,value50精選2021版課件其他標(biāo)簽<h:messages>或<h:message><h:graphicImage>圖片<h:panelGrid>排版本體間只能包括JSF組件,如果想要放入非JSF組件,例如簡單的樣版(template)文字,則要使用<f:verbatim>包括住。<h:panelGroup>包裝組件51精選2021版課件表格處理<h:dataTable>配合<h:column>實現(xiàn)以表格的方式顯示數(shù)據(jù)<f:facet>header與footer分別表示表頭和表尾使用DataModel處理復(fù)雜的數(shù)據(jù)52精選2021版課件七、事件處理動作事件(ActionEvent)即時事件(ImmediateEvent)值變事件(ValueChangeEvent)階段事件(PhaseEvent)53精選2021版課件動作事件(ActionEvent)通過action屬性綁定一個事件方法:<h:commandButtonvalue="提交"action="#{user.verify}"/>

通過actionListener屬性綁定一個事件方法,action綁定返回結(jié)果的方法:<h:commandButtonvalue="提交"actionListener="#{user.verify}"action="#{user.outcome}"/>用<f:actionListener>標(biāo)簽向組件注冊事件監(jiān)聽器(實現(xiàn)javax.faces.event.ActionListener接口),action綁定返回結(jié)果的方法:<h:commandButtonvalue="提交"action="#{user.outcome}"><f:actionListenertype="onlyfun.caterpillar.LogHandler"/><f:actionListenertype="onlyfun.caterpillar.VerifyHandler"/></h:commandButton>

54精選2021版課件即時事件(ImmediateEvent)即時事件是指JSF視圖組件在取得請求中該取得的值之后,即立即處理指定的事件,而不再進行后續(xù)的轉(zhuǎn)換器處理、驗證器處理、更新模型值等流程。

<h:commandButtonvalue="#{msgs.Text}" immediate="true" actionListener="#{user.changeLocale}"/>

55精選2021版課件值變事件(ValueChangeEvent)使用者改變了JSF輸入組件的值后提交表單,就會發(fā)生值變事件,丟出一個javax.faces.event.ValueChangeEvent對象直接設(shè)定JSF輸入組件的valueChangeListener屬性:

<h:selectOneMenuvalue="#{user.locale}" onchange="this.form.submit();" valueChangeListener="#{user.changeLocale}"> <f:selectItemitemValue="zh_CN"itemLabel="Chinese"/> <f:selectItemitemValue="en"itemLabel="English"/></h:selectOneMenu>

實現(xiàn)javax.faces.event.ValueChangeListener接口,并定義其processValueChange()方法;然后在JSF頁面上使用<f:valueChangeListener>標(biāo)簽,并設(shè)定其type屬性:

<h:selectOneMenuvalue="#{user.locale}" onchange="this.form.submit();"> <f:valueChangeListenettype=“cn.wiztek.SomeListener"/><f:selectItemitemValue="zh_CN"itemLabel="Chinese"/><f:selectItemitemValue="en"itemLabel="English"/></h:selectOneMenu>56精選2021版課件階段事件(PhaseEvent)重建視圖(RestoreView) 依客戶端傳來的session數(shù)據(jù)或服務(wù)器端上的session數(shù)據(jù),重建JSF視圖組件。套用請求值(ApplyRequestValues) JSF視圖組件各自獲得請求中的屬于自己的值,包括舊的值與新的值。執(zhí)行驗證(ProcessValidations) 轉(zhuǎn)換為對象并進行驗證。更新模型值(UpdateModelValues) 更新Bean或相關(guān)的模型值。喚起應(yīng)用程序(InvokeApplication) 執(zhí)行應(yīng)用程序相關(guān)邏輯。繪制響應(yīng)頁面(RenderResponse) 對先前的請求處理完之后,產(chǎn)生頁面以反應(yīng)客戶端執(zhí)行結(jié)果。57精選2021版課件階段事件(PhaseEvent)在每個階段的前后會引發(fā)javax.faces.event.PhaseEvent實現(xiàn)javax.faces.event.PhaseListener,并向javax.faces.lifecycle.Lifecycle登記這個Listener,便可捕獲事件getPhaseId()、beforePhase()與afterPhase()PhaseId:PhaseId.RESTORE_VIEWPhaseId.APPLY_REQUEST_VALUESPhaseId.PROCESS_VALIDATIONSPhaseId.UPDATE_MODEL_VALUESPhaseId.INVOKE_APPLICATIONPhaseId.RENDER_RESPONSEPhaseId.ANY_PHASE58精選2021版課件八、數(shù)據(jù)轉(zhuǎn)換與驗證轉(zhuǎn)換器(Converter)協(xié)助模型與視圖之間的數(shù)據(jù)轉(zhuǎn)換驗證器(Validator)協(xié)助進行語意檢驗(SemanticValidation)59精選2021版課件1.標(biāo)準轉(zhuǎn)換器HTTP字符串Java對象對于基本數(shù)據(jù)類型(primitivetype)或是其Wrapper類,JSF會使用javax.faces.Boolean、javax.faces.Byte……等自動進行轉(zhuǎn)換對于BigDecimal、BigInteger,則會使用javax.faces.BigDecimal、javax.faces.BigInteger自動進行轉(zhuǎn)換對于DateTime、Number,可以使用<f:convertDateTime>、<f:convertNumber>標(biāo)簽進行轉(zhuǎn)換,它們各自提供有一些簡單的屬性,可以讓我們在轉(zhuǎn)換時指定一些轉(zhuǎn)換的格式細節(jié):

<h:outputTextvalue="#{user.date}"><f:convertDateTimepattern="yyyy/MM/dd"/></h:outputText>

60精選2021版課件2.自定義轉(zhuǎn)換器實現(xiàn)javax.faces.convert.Converter接口,這個接口有兩個要實現(xiàn)的方法:publicObjectgetAsObject(FacesContextcontext,UIComponentcomponent,Stringstr);publicStringgetAsString(FacesContextcontext,UIComponentcomponent,Objectobj);在faces-config.xml中注冊:<converter> <converter-id>cn.wiztek.converter.User</converter-id> <converter-class>cn.wiztek.converter.UserConverter</converter-class></converter>在JSF頁面中通過converter-id使用轉(zhuǎn)換器:

<h:outputTextvalue="#{guest.user}"converter="cn.wiztek.converter.User"/>61精選2021版課件3.標(biāo)準驗證器語法檢驗(SynaticValidation)檢查使用者輸入的數(shù)據(jù)是否合乎我們所要求的格式,最基本的就是檢查使用者是否填入了欄目值,或是欄目值的長度、大小值等等是否符合要求。三種標(biāo)準驗證器:<f:validateDoubleRange><f:validateLongRange><f:validateLength>

62精選2021版課件4.自定義驗證器實現(xiàn)javax.faces.validator.Validator接口中的validate()方法,如果驗證錯誤,則丟出一個ValidatorException,它接受一個FacesMessage對象,這個對象接受三個參數(shù),分別表示信息的嚴重程度(INFO、WARN、ERROR、FATAL)、信息概述與詳細信息內(nèi)容,這些信息將可以使用<h:messages>或<h:message>標(biāo)簽顯示在頁面上。在faces-config.xml中注冊驗證器的標(biāo)識(ValidaterID)。通過<f:validator>標(biāo)簽并設(shè)定validatorId屬性來使用自定義驗證器。63精選2021版課件5.錯誤信息處理預(yù)定義的錯誤信息可以使用<h:messages>或<h:message>標(biāo)簽顯示出來通過提供一個信息資源文件可以修改預(yù)定義的錯誤信息MyFaces提供了支持中文的錯誤信息文件Messages_zh_CN.properties也可以在程序中使用FacesMessage來提供信息64精選2021版課件6.自定義轉(zhuǎn)換/驗證標(biāo)簽使用<f:attribute>標(biāo)簽來設(shè)定屬性:<f:attributename="pattern"value=".+[0-9]+"/>

在自定義驗證器中用下面語句獲取屬性:Stringpattern=(String)component.getAttributes().get("pattern");也可以開發(fā)自己的一組驗證標(biāo)簽,并提供相關(guān)屬性設(shè)定:<co:passwordValidatorpattern=".+[0-9]+"/>

65精選2021版課件九、傳統(tǒng)請求/響應(yīng)驅(qū)動的處理周期請求/響應(yīng)驅(qū)動的處理周期66精選2021版課件傳統(tǒng)請求/響應(yīng)處理模型的不足控制器缺乏對頁面的控制力控制能力僅限于頁面導(dǎo)航頁面缺乏對模型的控制力原則上頁面只應(yīng)負責(zé)從模型中提取數(shù)據(jù)并顯示,若直接設(shè)置模型數(shù)據(jù),則繞過了控制器中的轉(zhuǎn)換校驗邏輯。頁面與控制器之間缺乏有效溝通基于面向?qū)ο蟮目刂破麟y以適應(yīng)基于文本流的頁面。溝通形式局限于傳遞簡單的請求參數(shù),修改共享數(shù)據(jù)(例如JavaBean或Session屬性等)頁面對控制器的通信需要由客戶端發(fā)起請求,溝通形式受限于傳輸協(xié)議(例如HTTP的GET方式)對一個請求/響應(yīng)循環(huán)的邏輯缺乏細致劃分,導(dǎo)致校驗、轉(zhuǎn)換、展現(xiàn)的代碼糾纏在一起。程序員必須自己去關(guān)心進行這些動作的時機,次序以及出錯后的行為。67精選2021版課件JSF提供的解決方案JSF引擎負責(zé)維護視圖的組件樹模型類似于瀏覽器的DOM模型,JSF組件樹模型為基于文本流的視圖提供了一個面向?qū)ο蟮挠成???刂破骺梢栽L問、修改組件樹中的元素,從而獲取請求發(fā)起時的視圖狀態(tài),或者影響最終的響應(yīng)結(jié)果。JSF引擎負責(zé)發(fā)起校驗,轉(zhuǎn)換行為,程序員只需提供相關(guān)的邏輯,而不需要關(guān)心時機同時,JSF實現(xiàn)提供了常用的校驗與轉(zhuǎn)換邏輯。引入延遲求值EL表達式,令視圖可以以受控的方式調(diào)用、修改模型。JSF引擎管理對延遲求值EL表達式的賦值,調(diào)用等明確劃分首次請求與postback(對同一個視圖的后續(xù)請求),JSF引擎管理postback時的組件樹與模型更新。統(tǒng)一了視圖與控制器,從而消除了溝通問題。68精選

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論