版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
Java基礎知識之JavaWeb開發(fā)基礎培訓Java基礎知識之JavaWeb開發(fā)基礎培訓Java基礎知識之JavaWeb開發(fā)基礎培訓Java基礎知識之JavaWeb開發(fā)基礎培訓Java基礎知識1一、Web開發(fā)技術Web架構(gòu)用超文本技術(HTML)實現(xiàn)信息及信息的連接;用統(tǒng)一資源定位技術(URI)實現(xiàn)全球信息的精確定位;用新的應用層協(xié)議(HTTP)實現(xiàn)分布式的信息共享。靜態(tài)動態(tài)客戶端技術HTML、JavaApplets、JavaScript、ActiveX、CSS、DHTML、XHTML服務端技術CGI(CommonGatewayInterface)C、C++、PascalPerl、PythonPHP、ASP、Servlet(JSP)+JavaBean一、Web開發(fā)技術Web架構(gòu)2二、JSF框架JSF簡介JSF入門JSF標簽JSF開發(fā)環(huán)境二、JSF框架JSF簡介3JSF簡介什么是JSFJSF的特性JSF及其它框架的比較JSF實現(xiàn)JSF示例JSF簡介什么是JSF4什么是JSFJavaServerFaces(JSF):符合JavaEE5標準的JavaWeb應用框架。目標:簡化開發(fā)。JSF提供:標準的編程接口豐富可擴展的組件庫一個核心的JSP標記庫用來處理事件、執(zhí)行驗證以及其他非UI相關的操作(core)一個標準的HTML標記庫來表示UI組件(html)事件驅(qū)動模型JSF通過IDE工具支持拖放式開發(fā)。什么是JSFJavaServerFaces(JSF):5JSF的由來和目標由來EJB2的失敗非官方Web框架的興起目標簡化開發(fā)超越現(xiàn)有Web框架試圖在不同的角度上提供網(wǎng)頁設計人員、應用程序設計人員、組件開發(fā)人員解決方案,讓不同技術的人員可以彼此合作又不互相干擾JSF的由來和目標由來6JSF體系結(jié)構(gòu)JSF的主要優(yōu)勢之一就是它既是JavaWeb用戶界面標準又是嚴格遵循模型-視圖-控制器(MVC)設計模式的框架。用戶界面代碼(視圖)及應用程序數(shù)據(jù)和邏輯(模型)的清晰分離使JSF應用程序更易于管理。為了準備提供頁面對應用程序數(shù)據(jù)訪問的JSF上下文和防止對頁面未授權(quán)或不正確的訪問,所有及應用程序的用戶交互均由一個前端“Faces”servlet(控制器)來處理。JSF體系結(jié)構(gòu)JSF的主要優(yōu)勢之一就是它既是Java7JSF的特性技術特性一流的UI組件和事件模型POJO依賴注入(又稱控制反轉(zhuǎn))客戶端獨立性
使用或者不使用工具可擴展的導航(類似于Struts導航,注:Page導航)強大的擴展能力(如Shale)
完全的集成(如集成Spring、JPA)本地化和易理解性JSF的特性技術特性8JSF的特性市場和商業(yè)特性廣泛的采用,包括SUN,Oracle,IBM,BEA,Apache,EDS作為JavaEE5.0的組成部分大型第三方組件市場(iLog,BusinessObjects,Oracle,Sun,IBM)業(yè)內(nèi)領先的工具支持(SunJavaStudioCreator,NetBeans,OracleJDeveloper,IBMWSAD,BEAWorkshop,ExadelStudio)JSF的特性市場和商業(yè)特性9及其它框架的比較(來自TSS)技術特性商業(yè)使用JSF4.83.9WebWork4.23.1Shale4.951.3Tapestry4.752.8Wicket--0.7Struts4.24.6及其它框架的比較(來自TSS)技術特性商業(yè)使用JSF4.8310JSF的優(yōu)勢UI組件(UI-component)事件驅(qū)動模式用戶界面到業(yè)務邏輯的直接映射程序員和網(wǎng)頁設計人員的分工請求處理生命周期的多階段劃分全面的用戶自定義支持Web開發(fā)的官方標準之一大量的IDE工具支持
JSF的優(yōu)勢UI組件(UI-component)11JSF實現(xiàn)JSF是標準實現(xiàn)SunJSFRIApacheMyFaces組件庫TomahawkADFFaces(fromOracle)TobagoJSF實現(xiàn)JSF是標準12JSF示例<%@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>JSF示例<%@tagliburi="http://jav13JSF入門第一個JSF程序JSFExpressionLanguage國際化(I18N)ManagedBeans數(shù)據(jù)轉(zhuǎn)換及驗證事件處理JSF入門第一個JSF程序14第一個JSF程序JSF開發(fā)環(huán)境EclipseWTPJSF插件JSF實現(xiàn)(MyFaces)TomcatManaged-BeanJSP頁面PagesNavigation第一個JSF程序JSF開發(fā)環(huán)境15JSFExpressionLanguage搭配JSF標簽來使用,是用來存取數(shù)據(jù)對象的一個簡易語言。以#開始,將變量或運算式放置在{及}之間。#{userB}EL的變量名也可以程序執(zhí)行過程中所聲明的名稱,或是JSFEL預定義的隱含對象。#{}對于Map類型對象,可以使用‘.’
運算符指定key值來取出對應的value,也可以使用[及]來指定。#{param['name']}#{someBean.someMap[]}如果變量是List類型或陣列的話,則可以在[]中指定索引。#{someBean.someList[0]}JSFExpressionLanguage搭配JSF16JSFExpressionLanguage也可以指定字面常數(shù),對于true、false、字符串、數(shù)字,JSFEL會嘗試進行轉(zhuǎn)換。<h:outputTextvalue="#{true}"/><h:outputTextvalue=“#{‘Thisisatest’}”/>在聲明變量名稱時,要留意不可及JSF的保留字或關鍵字同名。truefalsenulldivmodandornoteqneltgtlegeinstanceofempty在EL中可以直接進行一些算術運算、邏輯運算及關系運算。算術運算符:加法(+),減法(-),乘法(*),除法(/ordiv)及余除(%ormod)三元運算:(expression?result1:result2)邏輯運算:and(或&&)、or(或!!)、not(或!)關系運算:小于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運算符對應JSFExpressionLanguage也可以指定字面17國際化信息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>標簽來指定載入信息資源:
<f:loadBundlebasename="messages"var="msgs"/> <h:outputTextvalue="#{Text}"/>國際化信息JSF的國際化(Internationalizat18國際化信息<f:view>可以設定locale屬性,直接指定所要使用的語系:
<f:viewlocale="zh_CN"> <f:loadBundlebasename="messages"var="msgs"/>也可以在faces-config.xml中設定語系:
<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>可以設定locale屬性,直接指定19ManagedBeansJSF使用Bean來達到邏輯層及表現(xiàn)層分離的目的,Bean的管理集中在配置文件中,只要修改配置文件,就可以修改Bean之間的相依關系。BackingBean,GlueBean:在真正的業(yè)務邏輯Bean及UI組件之間搭起橋梁,在BackingBean中會呼叫業(yè)務邏輯Bean處理使用者的請求,或者是將業(yè)務處理結(jié)果放置其中,等待UI組件取出當中的值并顯示結(jié)果給使用者。ManagedBeansJSF使用Bean來達到邏20ManagedBeans在faces-config.xml中集中管理作用域:application:一直存活session:會話過程request:請求階段none:需要時,臨時ManagedBeans在faces-config.xml21Beans的配置及設定JSF預定義會讀取faces-config.xml中關于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.xml
Beans的配置及設定JSF預定義會讀取faces-con22Beans的配置及設定Bean的基本定義:名稱 <managed-bean-name>類 <managed-bean-class> 存活范圍 <managed-bean-scope>可選設置屬性的初始值 <managed-property><managed-property> <property-name>user</property-name> <value>#{user}</value></managed-property>Beans的配置及設定Bean的基本定義:23Beans上的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>Beans上的List<managed-proper24Beans上的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>Beans上的Map<managed-property>25訪問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);訪問ManagedBeans如果要在其它類中取得Bean對26Jsf的頁面跳轉(zhuǎn)簡單跳轉(zhuǎn)跳轉(zhuǎn)的配置:<navigation-rule> <!–
發(fā)出跳轉(zhuǎn)請求的頁面--> <from-view-id>/test_inter.jsp</from-view-id> <navigation-case> <from-outcome>out</from-outcome><!–
跳轉(zhuǎn)成功的頁面--> <to-view-id>/test_out.jsp</to-view-id> </navigation-case></navigation-rule>Jsf頁面的實現(xiàn):<h:commandButtonid=“sumbit“action=“out”value=”跳轉(zhuǎn)"/>
Jsf的頁面跳轉(zhuǎn)簡單跳轉(zhuǎn)27Jsf的頁面跳轉(zhuǎn)復雜跳轉(zhuǎn),通過方法實現(xiàn)跳轉(zhuǎn)的配置:<navigation-rule> <from-view-id>/test_inter.jsp</from-view-id> <navigation-case> <from-outcome>sucess</from-outcome> <to-view-id>/success.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>error</from-outcome> <to-view-id>/error.jsp</to-view-id> </navigation-case></navigation-rule>Jsf的頁面跳轉(zhuǎn)復雜跳轉(zhuǎn),通過方法實現(xiàn)28Jsf的頁面跳轉(zhuǎn)復雜跳轉(zhuǎn),通過方法實現(xiàn)Jsf頁面的實現(xiàn):<h:commandButtonid=“sumbit“
actionListener="#{bean.action“value=”跳轉(zhuǎn)"/>方法實現(xiàn):publicStringaction(){//復雜邏輯Stringresult=“error”; try{ result=“success”; }catch(Exceptionex){ result=“error”; } returnresult;}Jsf的頁面跳轉(zhuǎn)復雜跳轉(zhuǎn),通過方法實現(xiàn)29數(shù)據(jù)轉(zhuǎn)換及驗證轉(zhuǎn)換器(Converter)協(xié)助模型及視圖之間的數(shù)據(jù)轉(zhuǎn)換驗證器(Validator)協(xié)助進行語意檢驗(SemanticValidation)數(shù)據(jù)轉(zhuǎn)換及驗證轉(zhuǎn)換器(Converter)協(xié)助模型及視圖之30標準轉(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>標簽進行轉(zhuǎn)換,它們各自提供有一些簡單的屬性,可以讓我們在轉(zhuǎn)換時指定一些轉(zhuǎn)換的格式細節(jié):
<h:outputTextvalue="#{user.date}"><f:convertDateTimepattern="yyyy/MM/dd"/></h:outputText>標準轉(zhuǎn)換器HTTP字符串Java對象31自定義轉(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"/>自定義轉(zhuǎn)換器實現(xiàn)javax.faces.convert.C32標準驗證器語法檢驗(SynaticValidation)檢查使用者輸入的數(shù)據(jù)是否合乎我們所要求的格式,最基本的就是檢查使用者是否填入了欄目值,或是欄目值的長度、大小值等等是否符合要求。三種標準驗證器:<f:validateDoubleRange><f:validateLongRange><f:validateLength>
標準驗證器語法檢驗(SynaticValidation)33自定義驗證器實現(xiàn)javax.faces.validator.Validator接口中的validate()方法,如果驗證錯誤,則丟出一個ValidatorException,它接受一個FacesMessage對象,這個對象接受三個參數(shù),分別表示信息的嚴重程度(INFO、WARN、ERROR、FATAL)、信息概述及詳細信息內(nèi)容,這些信息將可以使用<h:messages>或<h:message>標簽顯示在頁面上。在faces-config.xml中注冊驗證器的標識(ValidaterID)。通過<f:validator>標簽并設定validatorId屬性來使用自定義驗證器。自定義驗證器實現(xiàn)javax.faces.validator34自定義驗證器配置文件加上驗證器:<validator><validator-id>com.jinyang.validator.password</validator-id><validator-class>com.jinyang.validator.PasswordValidator</validator-class></validator>
Jsf頁面使用驗證器<h:inputSecretid=“password”value=""required="true"><f:validatorvalidatorId="com.jinyang.validator.password"/></h:inputSecret><h:messagefor=“password”></h:message>自定義驗證器配置文件加上驗證器:35自定義驗證器驗證器代碼:packagecom.jinyang.validator;importjavax.faces.application.FacesMessage;importponent.UIComponent;importjavax.faces.context.FacesContext;importjavax.faces.validator.Validator;importjavax.faces.validator.ValidatorException;public
classPasswordValidatorimplementsValidator{public
voidvalidate(FacesContextcontext,UIComponentcomponent,Objectobj)throwsValidatorException{//obj=驗證器組件關聯(lián)的jsf輸入組件的值Stringpassword=(String)obj;if(password.length()<6){FacesMessagemessage=newFacesMessage(FacesMessage.SEVERITY_ERROR,"字符長度小于6","字符長度不得小于6");throw
newValidatorException(message);}if(!password.matches(".+[0-9]+")){FacesMessagemessage=newFacesMessage(FacesMessage.SEVERITY_ERROR,"密碼必須包括字符及數(shù)字","密碼必須是字符加數(shù)字所組成");throw
newValidatorException(message);}}}自定義驗證器驗證器代碼:36錯誤信息處理預定義的錯誤信息可以使用<h:messages>或<h:message>標簽顯示出來通過提供一個信息資源文件可以修改預定義的錯誤信息MyFaces提供了支持中文的錯誤信息文件Messages_zh_CN.properties也可以在程序中使用FacesMessage來提供信息錯誤信息處理預定義的錯誤信息可以使用<h:messages37自定義轉(zhuǎn)換/驗證標簽使用<f:attribute>標簽來設定屬性:<f:attributename="pattern"value=".+[0-9]+"/>
在自定義驗證器中用下面語句獲取屬性:Stringpattern=(String)component.getAttributes().get("pattern");也可以開發(fā)自己的一組驗證標簽,并提供相關屬性設定:<co:passwordValidatorpattern=".+[0-9]+"/>
自定義轉(zhuǎn)換/驗證標簽使用<f:attribute>標簽來設38事件處理動作事件(ActionEvent)即時事件(ImmediateEvent)值變事件(ValueChangeEvent)階段事件(PhaseEvent)事件處理動作事件(ActionEvent)39動作事件(ActionEvent)通過action屬性綁定一個事件方法:<h:commandButtonvalue="提交"action="#{user.verify}"/>
通過actionListener屬性綁定一個事件方法,action綁定返回結(jié)果的方法:<h:commandButtonvalue="提交"actionListener="#{user.verify}"action="#{user.outcome}"/>用<f:actionListener>標簽向組件注冊事件監(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>
動作事件(ActionEvent)通過action屬性綁40即時事件(ImmediateEvent)
即時事件是指JSF視圖組件在取得請求中該取得的值之后,即立即處理指定的事件,而不再進行后續(xù)的轉(zhuǎn)換器處理、驗證器處理、更新模型值等流程。
<h:commandButtonvalue="#{msgs.Text}" immediate="true" actionListener="#{user.changeLocale}"/>
即時事件(ImmediateEvent)41值變事件(ValueChangeEvent)使用者改變了JSF輸入組件的值后提交表單,就會發(fā)生值變事件,丟出一個javax.faces.event.ValueChangeEvent對象直接設定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>標簽,并設定其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>值變事件(ValueChangeEvent)使用者改變42階段事件(PhaseEvent)重建視圖(RestoreView) 依客戶端傳來的session數(shù)據(jù)或服務器端上的session數(shù)據(jù),重建JSF視圖組件。套用請求值(ApplyRequestValues)
JSF視圖組件各自獲得請求中的屬于自己的值,包括舊的值及新的值。執(zhí)行驗證(ProcessValidations) 轉(zhuǎn)換為對象并進行驗證。更新模型值(UpdateModelValues) 更新Bean或相關的模型值。喚起應用程序(InvokeApplication) 執(zhí)行應用程序相關邏輯。繪制響應頁面(RenderResponse) 對先前的請求處理完之后,產(chǎn)生頁面以反應客戶端執(zhí)行結(jié)果。階段事件(PhaseEvent)重建視圖(Restore43階段事件(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_PHASE階段事件(PhaseEvent)在每個階段的前后會引發(fā)ja44JSF標簽標準標簽輸出類標簽輸入類標簽命令類標簽選擇類標簽其他標簽表格處理JSF標簽標準標簽45JSF標準標簽輸出(Outputs)其名稱以output作為開頭,作用為輸出指定的信息或綁定值。輸入(Inputs)其名稱以input作為開頭,其作用為提供使用者輸入框。命令(Commands)其名稱以command作為開頭,其作用為提供命令或鏈接按鈕。選擇(Selections)其名稱以select作為開頭,其作用為提供使用者選項的選取。其它包括了form、message、messages、graphicImage等等未分類的標簽。JSF標準標簽輸出(Outputs)46標準HTML標簽的屬性屬性名稱適用說明id所有組件可指定id名稱,以讓其它標簽或組件參考binding所有組件綁定至UIComponentrendered所有組件是否顯示組件styleClass所有組件設定Cascadingstylesheet(CSS)value輸入、輸出、命令組件設定值或綁定至指定的值valueChangeListener輸入組件設定值變事件處理者converter輸入、輸出組件設定轉(zhuǎn)換器validator輸入組件設定驗證器required輸入組件是否驗證必填輸入框immediate輸入、命令組件是否為即時事件標準HTML標簽的屬性屬性名稱適用說明id所有組件可指定id47輸出類標簽outputLabel產(chǎn)生<label>HTML標簽,使用for屬性指定組件的clientID,例如:
<h:inputTextid="user"value="#{}"/> <h:outputLabelfor="user"value="#{}"/>outputLink產(chǎn)生<a>HTML標簽,搭配<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ù)以格式化文字信息,例如:
<h:outputFormatvalue="{0},Yournameis{1}."> <f:paramvalue="Hello"/> <f:paramvalue="Guest"/> </h:outputFormat>outputText簡單的顯示指定的值或綁定的信息,例如:
<h:outputTextvalue="#{}"/>輸出類標簽outputLabel48輸入類標簽inputText顯示單行輸入框,即輸出<input>HTML標簽,其type屬性設定為text,例如:
<h:inputTextvalue="#{}"/>inputTextarea
顯示多行輸入文字區(qū)域,即輸出<textarea>HTML標簽,例如:
<h:inputTextareavalue="#{mand}"/>inputSecret顯示密碼輸入框,即輸出<input>HTML標簽,其type屬性設定為password,例如:
<h:inputSecretvalue="#{user.password}"/>
inputHidden隱藏輸入框,即輸出<input>HTML標簽,其type屬性設定為hidden,隱藏輸入框的值用于保留一些信息于客戶端,以在下一次發(fā)送表單時一并提交,例如:
<h:inputHiddenvalue="#{user.hiddenInfo}"/>輸入類標簽inputText49命令類標簽commandButton
顯示一個命令按鈕,即輸出<input>HTML標簽,其type屬性可以設定為button、submit或reset,預設是submit,按下按鈕會觸發(fā)javax.faces.event.ActionEvent,例如:
<h:commandButtonvalue="提交“
action="#{user.verify}"/>commandLink
產(chǎn)生超鏈接,會輸出<a>HTML標簽,而href屬性會有‘#’,而onclick屬性會含有一段JavaScript程序,這個JavaScript的目的是按下鏈接后自動提交表單,具體來說其作用就像按鈕,但外觀卻是超鏈接,例如:
<h:commandLinkvalue="#{mandText}" action="#{user.verify}"/>命令類標簽commandButton50選擇類標簽選取框<h:selectBooleanCheckbox>單選單選按鈕<h:selectOneRadio>單選列表<h:selectOneListbox>單選菜單<h:selectOneMenu>復選復選框<h:selectManyCheckbox>復選列表<h:selectManyListbox>復選菜單<h:selectManyMenu>選擇類標簽選取框51選擇類標簽的選項<f:selectItem>itemLabelitemValue或者value綁定一個傳回javax.faces.model.SelectItem的方法<f:selectItems>value綁定至一個提供傳回SelectItem的列表(數(shù)組)的方法
SelectItem:value,labelvalue綁定至一個提供傳回Map對象的方法
Map:label,value選擇類標簽的選項<f:selectItem>52其他標簽<h:messages>或<h:message><h:graphicImage>圖片<h:panelGrid>排版本體間只能包括JSF組件,如果想要放入非JSF組件,例如簡單的樣版(template)文字,則要使用<f:verbatim>包括住。<h:panelGroup>包裝組件其他標簽<h:messages>或<h:message>53表格處理<h:dataTable>配合<h:column>實現(xiàn)以表格的方式顯示數(shù)據(jù)<f:facet>header及footer分別表示表頭和表尾使用DataModel處理復雜的數(shù)據(jù)表格處理<h:dataTable>配合<h:column>實54Jsf上下文對象獲取Request變量獲?。喝绾稳〉妹Q為“data“的傳入?yún)?shù)值Mapparams=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
Stringdata=(String)params.get("data");Jsf上下文對象獲取Request變量獲?。?5Jsf上下文對象獲取session變量獲取:如何取得名稱為“UserInfo“的對象值UserInfoUser=(UserInfo)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(“UserInfo”);
System.out.println(User.UID);
System.out.println(User.UPwd);
Jsf上下文對象獲取session變量獲?。?6Primefaces簡介JavaServerFaces+AJAX=PrimefacesRichJSFComponentsPrimefaces簡介JavaServerFaces57primefaces控件primefaces控件58JSF控件的執(zhí)行過程JSF控件的執(zhí)行過程59三、Seam(JSF及JPA的橋梁)Seam簡介上下文組件模型對象關系映射遠程訪問對象注解EL表達式JBoss-tools自動生成項目骨架三、Seam(JSF及JPA的橋梁)Seam簡介60JBossSeam是一個JavaEE5框架。Seam通過把JSF及EJB3.0組件合并在一起,從而為開發(fā)基于Web的企業(yè)應用程序提供一個最新的模式。Seam可以讓你把EJB組件直接綁定到JSF頁面。Seam能夠統(tǒng)一和集成現(xiàn)有的開源技術集成如Facelets、Hibernate、jBPM、Drools、Groovy、JavaPortlets、BPM、AJAX、iText和Lucene。
Seam簡介Seam簡介61上下文組件模型
Seam中的兩個核心概念是context(上下文)思想和component(組件)思想。組件是具有狀態(tài)的對象,通常是EJB,也可以是POJO對象,組件的實例會和上下文綁定,在此上下文中具有一個名字。上下文組件模型Seam中的兩個核心概念是co62上下文組件模型@Entity@Name("user")@Scope(SESSION)@Table(name="Customer")public
classUserimplementsSerializable{…}@Stateful@Scope(EVENT)@Name("changePassword")@Restrict("#{identity.loggedIn}")public
classChangePasswordActionimplementsChangePassword{@In@Out
privateUseruser;…}The“User”entitybeanisinthe“Session”scope.WheneveramethodontheChangePasswordbeaniscalled,the“User”objectfromthesessionscopewillbeinjectedpriortothecall.Aftereverymethodcall,anychangestotheUserobjectare“out-jected”backtotheSession.Note:becausenamesmatch,nomappingisnecessary.上下文組件模型@Entity@StatefulThe“Us63對象關系映射Java持久化架構(gòu)HibernateJPASeam管理的事務
Seam為事務的開始,提交,回滾,同步提供了一個事務管理抽象Seam管理的持久化上下文在Seam管理的持久化上下文中使用JPA使用Seam管理的Hibernate會話對象關系映射Java持久化架構(gòu)64Seam注解一用于定義組件的注解
@Name("componentName")為一個類定義一個Seam組件
@Scope(ScopeType.CONVERSATION)定義默認的組件上下文
@BypassInterceptors
取消在特定組件或者一個組件方法上的所有攔截器。
@Synchronized(timeout=1000)如果組件被多個客戶端并發(fā)訪問,Seam應該串行化請
求。如果一個請求在給定時間段內(nèi)沒有得到組件的鎖,
將拋出一個例外。
@AutoCreate
聲明組件將被自動建立,即使客戶端不定義create=true用于雙向注入的注解
@In(value=“contextVariableName”)在每次組件調(diào)用開始時,從上下文變量注入此組件屬性
@Out(value="contextVariableName")在調(diào)用結(jié)束后注射出Seam組件屬性到上下文變量關于組件生命周期方法的注解
@Create當組件實例被Seam初始化時,該方法應被調(diào)用Seam注解一用于定義組件的注解65Seam注解二用于在J2EE環(huán)境中使用SeamJavaBean組件的注解@Transactional方法調(diào)用應該發(fā)生在一個事務中,如果當調(diào)用方法時沒有事務存在,一個事務將特地為該方法啟動用于SeamRemoting的注解@WebRemote(exclude="path.to.exclude")明被注解的方法可以被客戶端JavaScript腳本調(diào)用。用于Seam攔截器(interceptor)的注解@Interceptor(stateless=true)指定這個攔截器是無狀態(tài)的,Seam可以優(yōu)化復制用于異步(asynchronicity)的注解@AsynchronouspublicTimerscheduleAlerts(Alertalert,@ExpirationDatedate,@IntervalDurationlonginterval){...}用于JSF的注解@Converter允許一個Seam組件作為JSF轉(zhuǎn)換器(JSFconverter)。@Validator允許一個Seam組件作為JSF驗證器(JSFValidator)。用于和Servlet容器集成的注解Filter(around={"seamComponent","otherSeamComponent"})使一個用@Filter注解的Seam組件(它實現(xiàn)了javax.servlet.Filter接口)作為一個Servlet過濾器(Filter)使用。它將會被Seam的主Filter執(zhí)行Seam注解二用于在J2EE環(huán)境中使用SeamJavaBe66EL表達式一 JSF的表達式語言(EL)的形式跟jSP的表達式語言的形式類似:#{...}。EL的主要用途是使你可以引用和更新bean的屬性,或者執(zhí)行簡單的語句,而不用寫完整的Java代碼。JSFEL基于JSP2.0中的表達式語言,它的用法幾乎跟JSP2.0中的表達式語言一樣,但二者仍有一些關鍵不同:JSF使用(#)來標記表達式的開始,而JSP使用($);JSF表達式是雙向的。即它可以引用屬性的值也可以更新之;JSFEL也允許引用對象方法;某些JSP特定的特征無效,比如頁面上下文范圍(page);JSFEL表達式可以通過常規(guī)Java代碼求解(結(jié)果是可以不需要JSP);JSFEL不官方支持函數(shù)。JSFEL也支持“.”和“[]”取值。它支持全范圍的算術運算、邏輯運算及關系運算JSFEL支持的隱含變量有:cookie、header、headerValues、initParam、param、paramValues、applicationScope、sessionScope、requestScope、還有facesContext(當前請求的FacesContext實例)和view(當前視圖)。
如:varloginid="#{facesContext.externalContext.requestParameterMap.get('loginid')}";EL表達式一 JSF的表達式語言(EL)的形式跟jSP的表達67EL表達式二
Seam提供了一個可擴展標準統(tǒng)一表達語言(EL)被稱為JBossEL。JBossEL提供了許多增強表達和更強的EL語言方面的加強參數(shù)方法綁定<h:commandButtonaction="#{hotelBooking.bookHotel(hotel)}"value="BookHotel"/>參數(shù)值綁定#{.length()}、#{searchResults.size()}
映射#{company.departments.{d|}}EL表達式二 Seam提供了一個可擴展標準統(tǒng)一表達語言68四、EpointJWeb框架框架平臺架構(gòu)基于框架的編程方案工程組織方式界面規(guī)范(菜單、模板頁)獨立組件包編碼步驟用戶注冊案例實戰(zhàn)四、EpointJWeb框架框架平臺架構(gòu)69框架平臺架構(gòu)基于框架的重用是系統(tǒng)開發(fā)的主流方向,可以提高系統(tǒng)質(zhì)量及開發(fā)效率,主要包含以下通用平臺組件。組織架構(gòu)管理平臺權(quán)限配置管理平臺工作流管理平臺數(shù)據(jù)管理平臺消息管理平臺
框架平臺架構(gòu)基于框架的重用是系統(tǒng)開發(fā)的主流方向,可以提高系統(tǒng)70基于框架的編程方案創(chuàng)建web工程導入框架包新增功能包**.Bizlogic.jar**.Action.jar頁面文件(模板)Seam組件及頁面空間的綁定菜單掛載基于框架的編程方案創(chuàng)建web工程71工程組織方式WAR方式獨立的業(yè)務邏輯獨立的控制邏輯獨立的頁面展現(xiàn)新增頁面編輯頁面列表頁面工程組織方式WAR方式72界面規(guī)范之一:界面布局登錄界面首頁面左側(cè)菜單頂部菜單快捷菜單中間區(qū)域界面規(guī)范之一:界面布局登錄界面73界面規(guī)范之二:頁面模板Facelets模板涉及到3類文件:模板文件
模板文件是具有視圖文件中相同界面元素部分,并在其中定義了可插入的編輯區(qū)域來加入不相同的部分,使用“<ui:insertname="zoneName">默認內(nèi)容</ui:insert>”來定義編輯區(qū)域視圖文件(頁面文件)
視圖文件是我們具體要實現(xiàn)的頁面,也就是在地址欄引用的頁面,在該文件中使用<ui:composition>標簽來定義該頁面使用的模板(<ui:composition>的template屬性來定義),以及在模板中各個插入?yún)^(qū)域要顯示的內(nèi)容(在<ui:composition>內(nèi)容區(qū)域使用<ui:definename="zoneName">來定義),<ui:define>標簽對中的內(nèi)容可以使用普通標簽,也可以使用<ui:include>來包含第三類文件(內(nèi)容文件)內(nèi)容文件
內(nèi)容文件是普通的含有HTML或其他標簽的文件,它將被視圖文件中的<ui:include>來界面規(guī)范之二:頁面模板Facelets模板涉及到3類文件:74獨立組件包考慮新開發(fā)功能的整體重用可能?YES/NO考慮業(yè)務邏輯的重用性?-YES考慮頁面控制邏輯的重用性?-NO考慮頁面及控制邏輯的分離?-YES=**.Bizlogic.jar+**.Action.jar+頁面獨立組件包考慮新開發(fā)功能的整體重用可能?YES/NO75編碼步驟業(yè)務數(shù)據(jù)實體生成
可以通過Mis平臺在數(shù)據(jù)庫中新建表或者手動在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表。業(yè)務邏輯層編寫業(yè)務控制層編寫頁面展現(xiàn)層編寫
根據(jù)頁面的展示要求,選擇合適的頁面模板,選取相應的控件進行頁面的繪制??丶皊eam組件的綁定
展現(xiàn)層及后臺邏輯的交互通過action層的seam組件來完成,將對應的seam組件綁定到控件的value屬性或控件的事件方法上。編碼步驟業(yè)務數(shù)據(jù)實體生成76謝謝觀賞謝謝觀賞77Java基礎知識之JavaWeb開發(fā)基礎培訓Java基礎知識之JavaWeb開發(fā)基礎培訓Java基礎知識之JavaWeb開發(fā)基礎培訓Java基礎知識之JavaWeb開發(fā)基礎培訓Java基礎知識78一、Web開發(fā)技術Web架構(gòu)用超文本技術(HTML)實現(xiàn)信息及信息的連接;用統(tǒng)一資源定位技術(URI)實現(xiàn)全球信息的精確定位;用新的應用層協(xié)議(HTTP)實現(xiàn)分布式的信息共享。靜態(tài)動態(tài)客戶端技術HTML、JavaApplets、JavaScript、ActiveX、CSS、DHTML、XHTML服務端技術CGI(CommonGatewayInterface)C、C++、PascalPerl、PythonPHP、ASP、Servlet(JSP)+JavaBean一、Web開發(fā)技術Web架構(gòu)79二、JSF框架JSF簡介JSF入門JSF標簽JSF開發(fā)環(huán)境二、JSF框架JSF簡介80JSF簡介什么是JSFJSF的特性JSF及其它框架的比較JSF實現(xiàn)JSF示例JSF簡介什么是JSF81什么是JSFJavaServerFaces(JSF):符合JavaEE5標準的JavaWeb應用框架。目標:簡化開發(fā)。JSF提供:標準的編程接口豐富可擴展的組件庫一個核心的JSP標記庫用來處理事件、執(zhí)行驗證以及其他非UI相關的操作(core)一個標準的HTML標記庫來表示UI組件(html)事件驅(qū)動模型JSF通過IDE工具支持拖放式開發(fā)。什么是JSFJavaServerFaces(JSF):82JSF的由來和目標由來EJB2的失敗非官方Web框架的興起目標簡化開發(fā)超越現(xiàn)有Web框架試圖在不同的角度上提供網(wǎng)頁設計人員、應用程序設計人員、組件開發(fā)人員解決方案,讓不同技術的人員可以彼此合作又不互相干擾JSF的由來和目標由來83JSF體系結(jié)構(gòu)JSF的主要優(yōu)勢之一就是它既是JavaWeb用戶界面標準又是嚴格遵循模型-視圖-控制器(MVC)設計模式的框架。用戶界面代碼(視圖)及應用程序數(shù)據(jù)和邏輯(模型)的清晰分離使JSF應用程序更易于管理。為了準備提供頁面對應用程序數(shù)據(jù)訪問的JSF上下文和防止對頁面未授權(quán)或不正確的訪問,所有及應用程序的用戶交互均由一個前端“Faces”servlet(控制器)來處理。JSF體系結(jié)構(gòu)JSF的主要優(yōu)勢之一就是它既是Java84JSF的特性技術特性一流的UI組件和事件模型POJO依賴注入(又稱控制反轉(zhuǎn))客戶端獨立性
使用或者不使用工具可擴展的導航(類似于Struts導航,注:Page導航)強大的擴展能力(如Shale)
完全的集成(如集成Spring、JPA)本地化和易理解性JSF的特性技術特性85JSF的特性市場和商業(yè)特性廣泛的采用,包括SUN,Oracle,IBM,BEA,Apache,EDS作為JavaEE5.0的組成部分大型第三方組件市場(iLog,BusinessObjects,Oracle,Sun,IBM)業(yè)內(nèi)領先的工具支持(SunJavaStudioCreator,NetBeans,OracleJDeveloper,IBMWSAD,BEAWorkshop,ExadelStudio)JSF的特性市場和商業(yè)特性86及其它框架的比較(來自TSS)技術特性商業(yè)使用JSF4.83.9WebWork4.23.1Shale4.951.3Tapestry4.752.8Wicket--0.7Struts4.24.6及其它框架的比較(來自TSS)技術特性商業(yè)使用JSF4.8387JSF的優(yōu)勢UI組件(UI-component)事件驅(qū)動模式用戶界面到業(yè)務邏輯的直接映射程序員和網(wǎng)頁設計人員的分工請求處理生命周期的多階段劃分全面的用戶自定義支持Web開發(fā)的官方標準之一大量的IDE工具支持
JSF的優(yōu)勢UI組件(UI-component)88JSF實現(xiàn)JSF是標準實現(xiàn)SunJSFRIApacheMyFaces組件庫TomahawkADFFaces(fromOracle)TobagoJSF實現(xiàn)JSF是標準89JSF示例<%@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>JSF示例<%@tagliburi="http://jav90JSF入門第一個JSF程序JSFExpressionLanguage國際化(I18N)ManagedBeans數(shù)據(jù)轉(zhuǎn)換及驗證事件處理JSF入門第一個JSF程序91第一個JSF程序JSF開發(fā)環(huán)境EclipseWTPJSF插件JSF實現(xiàn)(MyFaces)TomcatManaged-BeanJSP頁面PagesNavigation第一個JSF程序JSF開發(fā)環(huán)境92JSFExpressionLanguage搭配JSF標簽來使用,是用來存取數(shù)據(jù)對象的一個簡易語言。以#開始,將變量或運算式放置在{及}之間。#{userB}EL的變量名也可以程序執(zhí)行過程中所聲明的名稱,或是JSFEL預定義的隱含對象。#{}對于Map類型對象,可以使用‘.’
運算符指定key值來取出對應的value,也可以使用[及]來指定。#{param['name']}#{someBean.someMap[]}如果變量是List類型或陣列的話,則可以在[]中指定索引。#{someBean.someList[0]}JSFExpressionLanguage搭配JSF93JSFExpressionLanguage也可以指定字面常數(shù),對于true、false、字符串、數(shù)字,JSFEL會嘗試進行轉(zhuǎn)換。<h:outputTe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 昆明醫(yī)科大學海源學院《應急管理信息系統(tǒng)》2023-2024學年第一學期期末試卷
- 江西財經(jīng)職業(yè)學院《飛機結(jié)構(gòu)基礎》2023-2024學年第一學期期末試卷
- 湖南三一工業(yè)職業(yè)技術學院《新課程理念與地理課程改革》2023-2024學年第一學期期末試卷
- 湖南安全技術職業(yè)學院《有限元方法》2023-2024學年第一學期期末試卷
- 【物理】《流體壓強與流速的關系》(教學設計)-2024-2025學年人教版(2024)初中物理八年級下冊
- 高考物理總復習《恒定電流》專項測試卷含答案
- 重慶工信職業(yè)學院《廣告策劃與設計》2023-2024學年第一學期期末試卷
- 鄭州電力職業(yè)技術學院《應用技術開發(fā)》2023-2024學年第一學期期末試卷
- 中國民用航空飛行學院《信息系統(tǒng)審計》2023-2024學年第一學期期末試卷
- 鄭州美術學院《建筑設備自動化課程設計》2023-2024學年第一學期期末試卷
- 高考專題復習:《史記 孫子吳起列傳》分析
- 風電工程需要編寫的專項施工方案及危大工程目錄
- 商業(yè)計劃書(BP)財務計劃風險控制資本退出與附錄的撰寫秘籍
- 二級綜合醫(yī)院評審標準實施細則
- 新大《新疆地質(zhì)概論》教案第6章 礦產(chǎn)資源
- EGD殺生劑劑化學品安全技術說明(MSDS)zj
- GB/T 12229-2005通用閥門碳素鋼鑄件技術條件
- 超分子化學-第三章 陰離子的絡合主體
- 控制變量法教學課件
- 血壓計保養(yǎng)記錄表
- 食品的售后服務承諾書范本范文(通用3篇)
評論
0/150
提交評論