![Java基礎(chǔ)知識(shí)之JavaWeb開(kāi)發(fā)基礎(chǔ)培訓(xùn)_第1頁(yè)](http://file4.renrendoc.com/view/362a62a85669a87d55da7f57955066ef/362a62a85669a87d55da7f57955066ef1.gif)
![Java基礎(chǔ)知識(shí)之JavaWeb開(kāi)發(fā)基礎(chǔ)培訓(xùn)_第2頁(yè)](http://file4.renrendoc.com/view/362a62a85669a87d55da7f57955066ef/362a62a85669a87d55da7f57955066ef2.gif)
![Java基礎(chǔ)知識(shí)之JavaWeb開(kāi)發(fā)基礎(chǔ)培訓(xùn)_第3頁(yè)](http://file4.renrendoc.com/view/362a62a85669a87d55da7f57955066ef/362a62a85669a87d55da7f57955066ef3.gif)
![Java基礎(chǔ)知識(shí)之JavaWeb開(kāi)發(fā)基礎(chǔ)培訓(xùn)_第4頁(yè)](http://file4.renrendoc.com/view/362a62a85669a87d55da7f57955066ef/362a62a85669a87d55da7f57955066ef4.gif)
![Java基礎(chǔ)知識(shí)之JavaWeb開(kāi)發(fā)基礎(chǔ)培訓(xùn)_第5頁(yè)](http://file4.renrendoc.com/view/362a62a85669a87d55da7f57955066ef/362a62a85669a87d55da7f57955066ef5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java基礎(chǔ)知識(shí)之JavaWeb開(kāi)發(fā)基礎(chǔ)培訓(xùn)一、Web開(kāi)發(fā)技術(shù)二、JSF框架三、SEAM框架四、EpointJWeb框架一、Web開(kāi)發(fā)技術(shù)Web架構(gòu)用超文本技術(shù)(HTML)實(shí)現(xiàn)信息與信息的連接;用統(tǒng)一資源定位技術(shù)(URI)實(shí)現(xiàn)全球信息的精確定位;用新的應(yīng)用層協(xié)議(HTTP)實(shí)現(xiàn)分布式的信息共享。靜態(tài)動(dòng)態(tài)客戶端技術(shù)HTML、JavaApplets、JavaScript、ActiveX、CSS、DHTML、XHTML服務(wù)端技術(shù)CGI(CommonGatewayInterface)C、C++、PascalPerl、PythonPHP、ASP、Servlet(JSP)+JavaBean二、JSF框架JSF簡(jiǎn)介JSF入門JSF標(biāo)簽JSF開(kāi)發(fā)環(huán)境JSF簡(jiǎn)介什么是JSFJSF的特性JSF與其它框架的比較JSF實(shí)現(xiàn)JSF示例什么是JSFJavaServerFaces(JSF):符合JavaEE5標(biāo)準(zhǔn)的JavaWeb應(yīng)用框架。目標(biāo):簡(jiǎn)化開(kāi)發(fā)。JSF提供:標(biāo)準(zhǔn)的編程接口豐富可擴(kuò)展的組件庫(kù)一個(gè)核心的JSP標(biāo)記庫(kù)用來(lái)處理事件、執(zhí)行驗(yàn)證以及其他非UI相關(guān)的操作(core)一個(gè)標(biāo)準(zhǔn)的HTML標(biāo)記庫(kù)來(lái)表示UI組件(html)事件驅(qū)動(dòng)模型JSF通過(guò)IDE工具支持拖放式開(kāi)發(fā)。JSF的由來(lái)和目標(biāo)由來(lái)EJB2的失敗非官方Web框架的興起目標(biāo)簡(jiǎn)化開(kāi)發(fā)超越現(xiàn)有Web框架試圖在不同的角度上提供網(wǎng)頁(yè)設(shè)計(jì)人員、應(yīng)用程序設(shè)計(jì)人員、組件開(kāi)發(fā)人員解決方案,讓不同技術(shù)的人員可以彼此合作又不互相干擾JSF體系結(jié)構(gòu)JSF的主要優(yōu)勢(shì)之一就是它既是JavaWeb用戶界面標(biāo)準(zhǔn)又是嚴(yán)格遵循模型-視圖-控制器(MVC)設(shè)計(jì)模式的框架。用戶界面代碼(視圖)與應(yīng)用程序數(shù)據(jù)和邏輯(模型)的清晰分離使JSF應(yīng)用程序更易于管理。為了準(zhǔn)備提供頁(yè)面對(duì)應(yīng)用程序數(shù)據(jù)訪問(wèn)的JSF上下文和防止對(duì)頁(yè)面未授權(quán)或不正確的訪問(wèn),所有與應(yīng)用程序的用戶交互均由一個(gè)前端“Faces”servlet(控制器)來(lái)處理。JSF的特性技術(shù)特性一流的UI組件和事件模型POJO依賴注入(又稱控制反轉(zhuǎn))客戶端獨(dú)立性
使用或者不使用工具可擴(kuò)展的導(dǎo)航(類似于Struts導(dǎo)航,注:Page導(dǎo)航)強(qiáng)大的擴(kuò)展能力(如Shale)
完全的集成(如集成Spring、JPA)本地化和易理解性JSF的特性市場(chǎng)和商業(yè)特性廣泛的采用,包括SUN,Oracle,IBM,BEA,Apache,EDS作為JavaEE5.0的組成部分大型第三方組件市場(chǎng)(iLog,BusinessObjects,Oracle,Sun,IBM)業(yè)內(nèi)領(lǐng)先的工具支持(SunJavaStudioCreator,NetBeans,OracleJDeveloper,IBMWSAD,BEAWorkshop,ExadelStudio)與其它框架的比較(來(lái)自TSS)技術(shù)特性商業(yè)使用JSF4.83.9WebWork4.23.1Shale4.951.3Tapestry4.752.8Wicket--0.7Struts4.24.6JSF的優(yōu)勢(shì)UI組件(UI-component)事件驅(qū)動(dòng)模式用戶界面到業(yè)務(wù)邏輯的直接映射程序員和網(wǎng)頁(yè)設(shè)計(jì)人員的分工請(qǐng)求處理生命周期的多階段劃分全面的用戶自定義支持Web開(kāi)發(fā)的官方標(biāo)準(zhǔn)之一大量的IDE工具支持
JSF實(shí)現(xiàn)JSF是標(biāo)準(zhǔn)實(shí)現(xiàn)SunJSFRIApacheMyFaces組件庫(kù)TomahawkADFFaces(fromOracle)TobagoJSF示例<%@tagliburi="/jsf/core"prefix="f"%><%@tagliburi="/jsf/html"prefix="h"%><%@pagecontentType="text/html;charset=GB2312"%><html><head> <title>第一個(gè)JSF程序</title></head><body><f:view><h:form><h3>請(qǐng)輸入您的名稱</h3>
名稱:<h:inputTextvalue="#{}"/><p> <h:commandButtonvalue=“提交"action="login"/> </h:form></f:view></body></html>JSF入門第一個(gè)JSF程序JSFExpressionLanguage國(guó)際化(I18N)ManagedBeans數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證事件處理第一個(gè)JSF程序JSF開(kāi)發(fā)環(huán)境EclipseWTPJSF插件JSF實(shí)現(xiàn)(MyFaces)TomcatManaged-BeanJSP頁(yè)面PagesNavigationJSFExpressionLanguage搭配JSF標(biāo)簽來(lái)使用,是用來(lái)存取數(shù)據(jù)對(duì)象的一個(gè)簡(jiǎn)易語(yǔ)言。以#開(kāi)始,將變量或運(yùn)算式放置在{與}之間。#{userB}EL的變量名也可以程序執(zhí)行過(guò)程中所聲明的名稱,或是JSFEL預(yù)定義的隱含對(duì)象。#{}對(duì)于Map類型對(duì)象,可以使用‘.’
運(yùn)算符指定key值來(lái)取出對(duì)應(yīng)的value,也可以使用[與]來(lái)指定。#{param['name']}#{someBean.someMap[]}如果變量是List類型或陣列的話,則可以在[]中指定索引。#{someBean.someList[0]}JSFExpressionLanguage也可以指定字面常數(shù),對(duì)于true、false、字符串、數(shù)字,JSFEL會(huì)嘗試進(jìn)行轉(zhuǎn)換。<h:outputTextvalue="#{true}"/><h:outputTextvalue=“#{‘Thisisatest’}”/>在聲明變量名稱時(shí),要留意不可與JSF的保留字或關(guān)鍵字同名。truefalsenulldivmodandornoteqneltgtlegeinstanceofempty在EL中可以直接進(jìn)行一些算術(shù)運(yùn)算、邏輯運(yùn)算與關(guān)系運(yùn)算。算術(shù)運(yùn)算符:加法(+),減法(-),乘法(*),除法(/ordiv)與余除(%ormod)三元運(yùn)算:(expression?result1:result2)邏輯運(yùn)算:and(或&&)、or(或!!)、not(或!)關(guān)系運(yùn)算:小于Less-than(<orlt)、大于Greater-than(>orgt)、小于或等于Less-than-or-equal(<=orle)、大于或等于Greater-than-or-equal(>=orge)、等于Equal(==oreq)、不等于NotEqual(!=orne)EL運(yùn)算符的執(zhí)行優(yōu)先順序與Java運(yùn)算符對(duì)應(yīng)國(guó)際化信息JSF的國(guó)際化(Internationalization,簡(jiǎn)寫I18N)信息處理是基于Java對(duì)國(guó)際化的支持,可以在一個(gè)信息資源文件中統(tǒng)一管理信息資源,資源文件的名稱是.properties,而內(nèi)容是名稱與值的配對(duì)。資源文件名稱由basename加上語(yǔ)言與地區(qū)來(lái)組成:
perties basename_perties basename_zh_CN.properties信息資源文件必須是ISO-8859-1編碼,所以對(duì)于非西方語(yǔ)系的處理,必須先將之轉(zhuǎn)換為JavaUnicodeEscape格式:
nameText=名稱nameText=\u540d\u79f0
使用<f:loadBundle>標(biāo)簽來(lái)指定載入信息資源:
<f:loadBundlebasename="messages"var="msgs"/> <h:outputTextvalue="#{Text}"/>國(guó)際化信息<f:view>可以設(shè)定locale屬性,直接指定所要使用的語(yǔ)系:
<f:viewlocale="zh_CN"> <f:loadBundlebasename="messages"var="msgs"/>也可以在faces-config.xml中設(shè)定語(yǔ)系:
<faces-config> <application> <local-config> <default-locale>zh_CN</default-locale> <supported-locale>en</supported-locale> </local-config></application></faces-config>
甚至可以讓使用者選擇自己的語(yǔ)系:
<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>
ManagedBeansJSF使用Bean來(lái)達(dá)到邏輯層與表現(xiàn)層分離的目的,Bean的管理集中在配置文件中,只要修改配置文件,就可以修改Bean之間的相依關(guān)系。BackingBean,GlueBean:在真正的業(yè)務(wù)邏輯Bean及UI組件之間搭起橋梁,在BackingBean中會(huì)呼叫業(yè)務(wù)邏輯Bean處理使用者的請(qǐng)求,或者是將業(yè)務(wù)處理結(jié)果放置其中,等待UI組件取出當(dāng)中的值并顯示結(jié)果給使用者。ManagedBeans在faces-config.xml中集中管理作用域:application:一直存活session:會(huì)話過(guò)程request:請(qǐng)求階段none:需要時(shí),臨時(shí)Beans的配置與設(shè)定JSF預(yù)定義會(huì)讀取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>
定義文件可以有多個(gè),中間以“,”
區(qū)隔:
/WEB-INF/navigation.xml,/WEB-INF/beans.xml
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>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>
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>訪問(wèn)ManagedBeans如果要在其它類中取得Bean對(duì)象,則可以先取得javax.faces.context.FacesContext,它代表了JSF目前的執(zhí)行環(huán)境對(duì)象,接著嘗試取得javax.faces.el.ValueBinding對(duì)象,從中取得指定的Bean對(duì)象:
FacesContextcontext=FacesContext.getCurrentInstance(); ValueBindingbinding=context.getApplication(). createValueBinding("#{user}"); UserBeanuser=(UserBean)binding.getValue(context);取得Bean的某個(gè)屬性:
FacesContextcontext=FacesContext.getCurrentInstance(); ValueBindingbinding=context.getApplication(). createValueBinding("#{}"); Stringname=(String)binding.getValue(context);
Jsf的頁(yè)面跳轉(zhuǎn)簡(jiǎn)單跳轉(zhuǎn)跳轉(zhuǎn)的配置:<navigation-rule> <!–
發(fā)出跳轉(zhuǎn)請(qǐng)求的頁(yè)面--> <from-view-id>/test_inter.jsp</from-view-id> <navigation-case> <from-outcome>out</from-outcome><!–
跳轉(zhuǎn)成功的頁(yè)面--> <to-view-id>/test_out.jsp</to-view-id> </navigation-case></navigation-rule>Jsf頁(yè)面的實(shí)現(xiàn):<h:commandButtonid=“sumbit“action=“out”value=”跳轉(zhuǎn)"/>
Jsf的頁(yè)面跳轉(zhuǎn)復(fù)雜跳轉(zhuǎn),通過(guò)方法實(shí)現(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的頁(yè)面跳轉(zhuǎn)復(fù)雜跳轉(zhuǎn),通過(guò)方法實(shí)現(xiàn)Jsf頁(yè)面的實(shí)現(xiàn):<h:commandButtonid=“sumbit“
actionListener="#{bean.action“value=”跳轉(zhuǎn)"/>方法實(shí)現(xiàn):publicStringaction(){//復(fù)雜邏輯Stringresult=“error”; try{ result=“success”; }catch(Exceptionex){ result=“error”; } returnresult;}數(shù)據(jù)轉(zhuǎn)換與驗(yàn)證轉(zhuǎn)換器(Converter)協(xié)助模型與視圖之間的數(shù)據(jù)轉(zhuǎn)換驗(yàn)證器(Validator)協(xié)助進(jìn)行語(yǔ)意檢驗(yàn)(SemanticValidation)標(biāo)準(zhǔn)轉(zhuǎn)換器HTTP字符串Java對(duì)象對(duì)于基本數(shù)據(jù)類型(primitivetype)或是其Wrapper類,JSF會(huì)使用javax.faces.Boolean、javax.faces.Byte……等自動(dòng)進(jìn)行轉(zhuǎn)換對(duì)于BigDecimal、BigInteger,則會(huì)使用javax.faces.BigDecimal、javax.faces.BigInteger自動(dòng)進(jìn)行轉(zhuǎn)換對(duì)于DateTime、Number,可以使用<f:convertDateTime>、<f:convertNumber>標(biāo)簽進(jìn)行轉(zhuǎn)換,它們各自提供有一些簡(jiǎn)單的屬性,可以讓我們?cè)谵D(zhuǎn)換時(shí)指定一些轉(zhuǎn)換的格式細(xì)節(jié):
<h:outputTextvalue="#{user.date}"><f:convertDateTimepattern="yyyy/MM/dd"/></h:outputText>
自定義轉(zhuǎn)換器實(shí)現(xiàn)javax.faces.convert.Converter接口,這個(gè)接口有兩個(gè)要實(shí)現(xiàn)的方法:publicObjectgetAsObject(FacesContextcontext,UIComponentcomponent,Stringstr);publicStringgetAsString(FacesContextcontext,UIComponentcomponent,Objectobj);在faces-config.xml中注冊(cè):<converter> <converter-id>cn.wiztek.converter.User</converter-id> <converter-class>cn.wiztek.converter.UserConverter </converter-class></converter>在JSF頁(yè)面中通過(guò)converter-id使用轉(zhuǎn)換器:
<h:outputTextvalue="#{guest.user}"converter="cn.wiztek.converter.User"/>標(biāo)準(zhǔn)驗(yàn)證器語(yǔ)法檢驗(yàn)(SynaticValidation)檢查使用者輸入的數(shù)據(jù)是否合乎我們所要求的格式,最基本的就是檢查使用者是否填入了欄目值,或是欄目值的長(zhǎng)度、大小值等等是否符合要求。三種標(biāo)準(zhǔn)驗(yàn)證器:<f:validateDoubleRange><f:validateLongRange><f:validateLength>
自定義驗(yàn)證器實(shí)現(xiàn)javax.faces.validator.Validator接口中的validate()方法,如果驗(yàn)證錯(cuò)誤,則丟出一個(gè)ValidatorException,它接受一個(gè)FacesMessage對(duì)象,這個(gè)對(duì)象接受三個(gè)參數(shù),分別表示信息的嚴(yán)重程度(INFO、WARN、ERROR、FATAL)、信息概述與詳細(xì)信息內(nèi)容,這些信息將可以使用<h:messages>或<h:message>標(biāo)簽顯示在頁(yè)面上。在faces-config.xml中注冊(cè)驗(yàn)證器的標(biāo)識(shí)(ValidaterID)。通過(guò)<f:validator>標(biāo)簽并設(shè)定validatorId屬性來(lái)使用自定義驗(yàn)證器。自定義驗(yàn)證器配置文件加上驗(yàn)證器:<validator><validator-id>com.jinyang.validator.password</validator-id><validator-class>com.jinyang.validator.PasswordValidator</validator-class></validator>
Jsf頁(yè)面使用驗(yàn)證器<h:inputSecretid=“password”value=""required="true"><f:validatorvalidatorId="com.jinyang.validator.password"/></h:inputSecret><h:messagefor=“password”></h:message>自定義驗(yàn)證器驗(yàn)證器代碼: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=驗(yàn)證器組件關(guān)聯(lián)的jsf輸入組件的值Stringpassword=(String)obj;if(password.length()<6){FacesMessagemessage=newFacesMessage(FacesMessage.SEVERITY_ERROR,"字符長(zhǎng)度小于6","字符長(zhǎng)度不得小于6");throw
newValidatorException(message);}if(!password.matches(".+[0-9]+")){FacesMessagemessage=newFacesMessage(FacesMessage.SEVERITY_ERROR,"密碼必須包括字符與數(shù)字","密碼必須是字符加數(shù)字所組成");throw
newValidatorException(message);}}}錯(cuò)誤信息處理預(yù)定義的錯(cuò)誤信息可以使用<h:messages>或<h:message>標(biāo)簽顯示出來(lái)通過(guò)提供一個(gè)信息資源文件可以修改預(yù)定義的錯(cuò)誤信息MyFaces提供了支持中文的錯(cuò)誤信息文件Messages_zh_CN.properties也可以在程序中使用FacesMessage來(lái)提供信息自定義轉(zhuǎn)換/驗(yàn)證標(biāo)簽使用<f:attribute>標(biāo)簽來(lái)設(shè)定屬性:<f:attributename="pattern"value=".+[0-9]+"/>
在自定義驗(yàn)證器中用下面語(yǔ)句獲取屬性:Stringpattern=(String)component.getAttributes().get("pattern");也可以開(kāi)發(fā)自己的一組驗(yàn)證標(biāo)簽,并提供相關(guān)屬性設(shè)定:<co:passwordValidatorpattern=".+[0-9]+"/>
事件處理動(dòng)作事件(ActionEvent)即時(shí)事件(ImmediateEvent)值變事件(ValueChangeEvent)階段事件(PhaseEvent)動(dòng)作事件(ActionEvent)通過(guò)action屬性綁定一個(gè)事件方法:<h:commandButtonvalue="提交"action="#{user.verify}"/>
通過(guò)actionListener屬性綁定一個(gè)事件方法,action綁定返回結(jié)果的方法:<h:commandButtonvalue="提交"actionListener="#{user.verify}"action="#{user.outcome}"/>用<f:actionListener>標(biāo)簽向組件注冊(cè)事件監(jiān)聽(tīng)器(實(shí)現(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>
即時(shí)事件(ImmediateEvent)
即時(shí)事件是指JSF視圖組件在取得請(qǐng)求中該取得的值之后,即立即處理指定的事件,而不再進(jìn)行后續(xù)的轉(zhuǎn)換器處理、驗(yàn)證器處理、更新模型值等流程。
<h:commandButtonvalue="#{msgs.Text}" immediate="true" actionListener="#{user.changeLocale}"/>
值變事件(ValueChangeEvent)使用者改變了JSF輸入組件的值后提交表單,就會(huì)發(fā)生值變事件,丟出一個(gè)javax.faces.event.ValueChangeEvent對(duì)象直接設(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>
實(shí)現(xiàn)javax.faces.event.ValueChangeListener接口,并定義其processValueChange()方法;然后在JSF頁(yè)面上使用<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>階段事件(PhaseEvent)重建視圖(RestoreView) 依客戶端傳來(lái)的session數(shù)據(jù)或服務(wù)器端上的session數(shù)據(jù),重建JSF視圖組件。套用請(qǐng)求值(ApplyRequestValues)
JSF視圖組件各自獲得請(qǐng)求中的屬于自己的值,包括舊的值與新的值。執(zhí)行驗(yàn)證(ProcessValidations) 轉(zhuǎn)換為對(duì)象并進(jìn)行驗(yàn)證。更新模型值(UpdateModelValues) 更新Bean或相關(guān)的模型值。喚起應(yīng)用程序(InvokeApplication) 執(zhí)行應(yīng)用程序相關(guān)邏輯。繪制響應(yīng)頁(yè)面(RenderResponse) 對(duì)先前的請(qǐng)求處理完之后,產(chǎn)生頁(yè)面以反應(yīng)客戶端執(zhí)行結(jié)果。階段事件(PhaseEvent)在每個(gè)階段的前后會(huì)引發(fā)javax.faces.event.PhaseEvent實(shí)現(xiàn)javax.faces.event.PhaseListener,并向javax.faces.lifecycle.Lifecycle登記這個(gè)Listener,便可捕獲事件getPhaseId()、beforePhase()與afterPhase()PhaseId:PhaseId.RESTORE_VIEWPhaseId.APPLY_REQUEST_VALUESPhaseId.PROCESS_VALIDATIONSPhaseId.UPDATE_MODEL_VALUESPhaseId.INVOKE_APPLICATIONPhaseId.RENDER_RESPONSEPhaseId.ANY_PHASEJSF標(biāo)簽標(biāo)準(zhǔn)標(biāo)簽輸出類標(biāo)簽輸入類標(biāo)簽命令類標(biāo)簽選擇類標(biāo)簽其他標(biāo)簽表格處理JSF標(biāo)準(zhǔn)標(biāo)簽輸出(Outputs)其名稱以output作為開(kāi)頭,作用為輸出指定的信息或綁定值。輸入(Inputs)其名稱以input作為開(kāi)頭,其作用為提供使用者輸入框。命令(Commands)其名稱以command作為開(kāi)頭,其作用為提供命令或鏈接按鈕。選擇(Selections)其名稱以select作為開(kāi)頭,其作用為提供使用者選項(xiàng)的選取。其它包括了form、message、messages、graphicImage等等未分類的標(biāo)簽。標(biāo)準(zhǔn)HTML標(biāo)簽的屬性屬性名稱適用說(shuō)明id所有組件可指定id名稱,以讓其它標(biāo)簽或組件參考binding所有組件綁定至UIComponentrendered所有組件是否顯示組件styleClass所有組件設(shè)定Cascadingstylesheet(CSS)value輸入、輸出、命令組件設(shè)定值或綁定至指定的值valueChangeListener輸入組件設(shè)定值變事件處理者converter輸入、輸出組件設(shè)定轉(zhuǎn)換器validator輸入組件設(shè)定驗(yàn)證器required輸入組件是否驗(yàn)證必填輸入框immediate輸入、命令組件是否為即時(shí)事件輸出類標(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ù)都會(huì)變成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>來(lái)設(shè)定信息的參數(shù)以格式化文字信息,例如:
<h:outputFormatvalue="{0},Yournameis{1}."> <f:paramvalue="Hello"/> <f:paramvalue="Guest"/> </h:outputFormat>outputText簡(jiǎn)單的顯示指定的值或綁定的信息,例如:
<h:outputTextvalue="#{}"/>
輸入類標(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ā)送表單時(shí)一并提交,例如:
<h:inputHiddenvalue="#{user.hiddenInfo}"/>命令類標(biāo)簽commandButton
顯示一個(gè)命令按鈕,即輸出<input>HTML標(biāo)簽,其type屬性可以設(shè)定為button、submit或reset,預(yù)設(shè)是submit,按下按鈕會(huì)觸發(fā)javax.faces.event.ActionEvent,例如:
<h:commandButtonvalue="提交“
action="#{user.verify}"/>commandLink
產(chǎn)生超鏈接,會(huì)輸出<a>HTML標(biāo)簽,而href屬性會(huì)有‘#’,而onclick屬性會(huì)含有一段JavaScript程序,這個(gè)JavaScript的目的是按下鏈接后自動(dòng)提交表單,具體來(lái)說(shuō)其作用就像按鈕,但外觀卻是超鏈接,例如:
<h:commandLinkvalue="#{mandText}" action="#{user.verify}"/>
選擇類標(biāo)簽選取框<h:selectBooleanCheckbox>單選單選按鈕<h:selectOneRadio>單選列表<h:selectOneListbox>單選菜單<h:selectOneMenu>復(fù)選復(fù)選框<h:selectManyCheckbox>復(fù)選列表<h:selectManyListbox>復(fù)選菜單<h:selectManyMenu>選擇類標(biāo)簽的選項(xiàng)<f:selectItem>itemLabelitemValue或者value綁定一個(gè)傳回javax.faces.model.SelectItem的方法<f:selectItems>value綁定至一個(gè)提供傳回SelectItem的列表(數(shù)組)的方法
SelectItem:value,labelvalue綁定至一個(gè)提供傳回Map對(duì)象的方法
Map:label,value其他標(biāo)簽<h:messages>或<h:message><h:graphicImage>圖片<h:panelGrid>排版本體間只能包括JSF組件,如果想要放入非JSF組件,例如簡(jiǎn)單的樣版(template)文字,則要使用<f:verbatim>包括住。<h:panelGroup>包裝組件表格處理<h:dataTable>配合<h:column>實(shí)現(xiàn)以表格的方式顯示數(shù)據(jù)<f:facet>header與footer分別表示表頭和表尾使用DataModel處理復(fù)雜的數(shù)據(jù)Jsf上下文對(duì)象獲取Request變量獲?。喝绾稳〉妹Q為“data“的傳入?yún)?shù)值Mapparams=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
Stringdata=(String)params.get("data");Jsf上下文對(duì)象獲取session變量獲?。喝绾稳〉妹Q為“UserInfo“的對(duì)象值UserInfoUser=(UserInfo)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(“UserInfo”);
System.out.println(User.UID);
System.out.println(User.UPwd);
Primefaces簡(jiǎn)介JavaServerFaces+AJAX=PrimefacesRichJSFComponentsprimefaces控件JSF控件的執(zhí)行過(guò)程三、Seam(JSF與JPA的橋梁)Seam簡(jiǎn)介上下文組件模型對(duì)象關(guān)系映射遠(yuǎn)程訪問(wèn)對(duì)象注解EL表達(dá)式JBoss-tools自動(dòng)生成項(xiàng)目骨架JBossSeam是一個(gè)JavaEE5框架。Seam通過(guò)把JSF與EJB3.0組件合并在一起,從而為開(kāi)發(fā)基于Web的企業(yè)應(yīng)用程序提供一個(gè)最新的模式。Seam可以讓你把EJB組件直接綁定到JSF頁(yè)面。Seam能夠統(tǒng)一和集成現(xiàn)有的開(kāi)源技術(shù)集成如Facelets、Hibernate、jBPM、Drools、Groovy、JavaPortlets、BPM、AJAX、iText和Lucene。
Seam簡(jiǎn)介上下文組件模型
Seam中的兩個(gè)核心概念是context(上下文)思想和component(組件)思想。組件是具有狀態(tài)的對(duì)象,通常是EJB,也可以是POJO對(duì)象,組件的實(shí)例會(huì)和上下文綁定,在此上下文中具有一個(gè)名字。上下文組件模型@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.對(duì)象關(guān)系映射Java持久化架構(gòu)HibernateJPASeam管理的事務(wù)
Seam為事務(wù)的開(kāi)始,提交,回滾,同步提供了一個(gè)事務(wù)管理抽象Seam管理的持久化上下文在Seam管理的持久化上下文中使用JPA使用Seam管理的Hibernate會(huì)話Seam注解一用于定義組件的注解
@Name("componentName")為一個(gè)類定義一個(gè)Seam組件
@Scope(ScopeType.CONVERSATION)定義默認(rèn)的組件上下文
@BypassInterceptors
取消在特定組件或者一個(gè)組件方法上的所有攔截器。
@Synchronized(timeout=1000)如果組件被多個(gè)客戶端并發(fā)訪問(wèn),Seam應(yīng)該串行化請(qǐng)
求。如果一個(gè)請(qǐng)求在給定時(shí)間段內(nèi)沒(méi)有得到組件的鎖,
將拋出一個(gè)例外。
@AutoCreate
聲明組件將被自動(dòng)建立,即使客戶端不定義create=true用于雙向注入的注解
@In(value=“contextVariableName”)在每次組件調(diào)用開(kāi)始時(shí),從上下文變量注入此組件屬性
@Out(value="contextVariableName")在調(diào)用結(jié)束后注射出Seam組件屬性到上下文變量關(guān)于組件生命周期方法的注解
@Create當(dāng)組件實(shí)例被Seam初始化時(shí),該方法應(yīng)被調(diào)用Seam注解二用于在J2EE環(huán)境中使用SeamJavaBean組件的注解@Transactional方法調(diào)用應(yīng)該發(fā)生在一個(gè)事務(wù)中,如果當(dāng)調(diào)用方法時(shí)沒(méi)有事務(wù)存在,一個(gè)事務(wù)將特地為該方法啟動(dòng)用于SeamRemoting的注解@WebRemote(exclude="path.to.exclude")明被注解的方法可以被客戶端JavaScript腳本調(diào)用。用于Seam攔截器(interceptor)的注解@Interceptor(stateless=true)指定這個(gè)攔截器是無(wú)狀態(tài)的,Seam可以優(yōu)化復(fù)制用于異步(asynchronicity)的注解@AsynchronouspublicTimerscheduleAlerts(Alertalert,@ExpirationDatedate,@IntervalDurationlonginterval){...}用于JSF的注解@Converter允許一個(gè)Seam組件作為JSF轉(zhuǎn)換器(JSFconverter)。@Validator允許一個(gè)Seam組件作為JSF驗(yàn)證器(JSFValidator)。用于和Servlet容器集成的注解Filter(around={"seamComponent","otherSeamComponent"})使一個(gè)用@Filter注解的Seam組件(它實(shí)現(xiàn)了javax.servlet.Filter接口)作為一個(gè)Servlet過(guò)濾器(Filter)使用。它將會(huì)被Seam的主Filter執(zhí)行EL表達(dá)式一 JSF的表達(dá)式語(yǔ)言(EL)的形式跟jSP的表達(dá)式語(yǔ)言的形式類似:#{...}。EL的主要用途是使
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版 八年級(jí)英語(yǔ)下冊(cè) Unit 4 單元綜合測(cè)試卷(2025年春)
- 2025年網(wǎng)狀蓬松石英棉合作協(xié)議書
- 基本醫(yī)療衛(wèi)生與健康促進(jìn)法學(xué)習(xí)試題試卷及答案(一)
- 2025年制動(dòng)總泵合作協(xié)議書
- 2022石家莊49中九年級(jí)6月三模試卷
- 2025年二手工程機(jī)械買賣轉(zhuǎn)讓合同范文(2篇)
- 2025年人員勞務(wù)協(xié)議格式版(2篇)
- 2025年產(chǎn)品購(gòu)銷合同協(xié)議標(biāo)準(zhǔn)版本(2篇)
- 2025年產(chǎn)品委托生產(chǎn)合同標(biāo)準(zhǔn)版本(三篇)
- 2025年臨時(shí)工合同協(xié)議模板(2篇)
- 中國(guó)儲(chǔ)備糧管理集團(tuán)有限公司蘭州分公司招聘筆試真題2024
- 武漢2025年湖北武漢理工大學(xué)管理人員招聘筆試歷年參考題庫(kù)附帶答案詳解
- 第1課 隋朝統(tǒng)一與滅亡 課件(26張)2024-2025學(xué)年部編版七年級(jí)歷史下冊(cè)
- 提高金剛砂地坪施工一次合格率
- 【歷史】唐朝建立與“貞觀之治”課件-2024-2025學(xué)年統(tǒng)編版七年級(jí)歷史下冊(cè)
- 基于護(hù)士主導(dǎo)的MDT肺康復(fù)管理模式改善肺部術(shù)后患者照護(hù)結(jié)局
- 產(chǎn)業(yè)園區(qū)招商合作協(xié)議書
- 2024年廣東省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 2025新譯林版英語(yǔ)七年級(jí)下單詞默寫表
- 2024-2025學(xué)年人教版八年級(jí)上冊(cè)數(shù)學(xué)期末專項(xiàng)復(fù)習(xí):軸對(duì)稱(易錯(cuò)必刷40題)解析版
- 盾構(gòu)標(biāo)準(zhǔn)化施工手冊(cè)
評(píng)論
0/150
提交評(píng)論