Java基礎知識之JavaWeb開發(fā)基礎培訓_第1頁
Java基礎知識之JavaWeb開發(fā)基礎培訓_第2頁
Java基礎知識之JavaWeb開發(fā)基礎培訓_第3頁
Java基礎知識之JavaWeb開發(fā)基礎培訓_第4頁
Java基礎知識之JavaWeb開發(fā)基礎培訓_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Java基礎知識之JavaWeb開發(fā)基礎培訓一、Web開發(fā)技術二、JSF框架三、SEAM框架四、EpointJWeb框架一、Web開發(fā)技術Web架構用超文本技術(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二、JSF框架JSF簡介JSF入門JSF標簽JSF開發(fā)環(huán)境JSF簡介什么是JSFJSF的特性JSF與其它框架的比較JSF實現(xiàn)JSF示例什么是JSFJavaServerFaces(JSF):符合JavaEE5標準的JavaWeb應用框架。目標:簡化開發(fā)。JSF提供:標準的編程接口豐富可擴展的組件庫一個核心的JSP標記庫用來處理事件、執(zhí)行驗證以及其他非UI相關的操作(core)一個標準的HTML標記庫來表示UI組件(html)事件驅動模型JSF通過IDE工具支持拖放式開發(fā)。JSF的由來和目標由來EJB2的失敗非官方Web框架的興起目標簡化開發(fā)超越現(xiàn)有Web框架試圖在不同的角度上提供網(wǎng)頁設計人員、應用程序設計人員、組件開發(fā)人員解決方案,讓不同技術的人員可以彼此合作又不互相干擾JSF體系結構JSF的主要優(yōu)勢之一就是它既是JavaWeb用戶界面標準又是嚴格遵循模型-視圖-控制器(MVC)設計模式的框架。用戶界面代碼(視圖)與應用程序數(shù)據(jù)和邏輯(模型)的清晰分離使JSF應用程序更易于管理。為了準備提供頁面對應用程序數(shù)據(jù)訪問的JSF上下文和防止對頁面未授權或不正確的訪問,所有與應用程序的用戶交互均由一個前端“Faces”servlet(控制器)來處理。JSF的特性技術特性一流的UI組件和事件模型POJO依賴注入(又稱控制反轉)客戶端獨立性

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

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

JSF實現(xiàn)JSF是標準實現(xiàn)SunJSFRIApacheMyFaces組件庫TomahawkADFFaces(fromOracle)TobagoJSF示例<%@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入門第一個JSF程序JSFExpressionLanguage國際化(I18N)ManagedBeans數(shù)據(jù)轉換與驗證事件處理第一個JSF程序JSF開發(fā)環(huán)境EclipseWTPJSF插件JSF實現(xiàn)(MyFaces)TomcatManaged-BeanJSP頁面PagesNavigationJSFExpressionLanguage搭配JSF標簽來使用,是用來存取數(shù)據(jù)對象的一個簡易語言。以#開始,將變量或運算式放置在{與}之間。#{userB}EL的變量名也可以程序執(zhí)行過程中所聲明的名稱,或是JSFEL預定義的隱含對象。#{}對于Map類型對象,可以使用‘.’

運算符指定key值來取出對應的value,也可以使用[與]來指定。#{param['name']}#{someBean.someMap[]}如果變量是List類型或陣列的話,則可以在[]中指定索引。#{someBean.someList[0]}JSFExpressionLanguage也可以指定字面常數(shù),對于true、false、字符串、數(shù)字,JSFEL會嘗試進行轉換。<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運算符對應國際化信息JSF的國際化(Internationalization,簡寫I18N)信息處理是基于Java對國際化的支持,可以在一個信息資源文件中統(tǒng)一管理信息資源,資源文件的名稱是.properties,而內(nèi)容是名稱與值的配對。資源文件名稱由basename加上語言與地區(qū)來組成:

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

nameText=名稱nameText=\u540d\u79f0

使用<f:loadBundle>標簽來指定載入信息資源:

<f:loadBundlebasename="messages"var="msgs"/> <h:outputTextvalue="#{Text}"/>國際化信息<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>

ManagedBeansJSF使用Bean來達到邏輯層與表現(xiàn)層分離的目的,Bean的管理集中在配置文件中,只要修改配置文件,就可以修改Bean之間的相依關系。BackingBean,GlueBean:在真正的業(yè)務邏輯Bean及UI組件之間搭起橋梁,在BackingBean中會呼叫業(yè)務邏輯Bean處理使用者的請求,或者是將業(yè)務處理結果放置其中,等待UI組件取出當中的值并顯示結果給使用者。ManagedBeans在faces-config.xml中集中管理作用域:application:一直存活session:會話過程request:請求階段none:需要時,臨時Beans的配置與設定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的配置與設定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上的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>訪問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);

Jsf的頁面跳轉簡單跳轉跳轉的配置:<navigation-rule> <!–

發(fā)出跳轉請求的頁面--> <from-view-id>/test_inter.jsp</from-view-id> <navigation-case> <from-outcome>out</from-outcome><!–

跳轉成功的頁面--> <to-view-id>/test_out.jsp</to-view-id> </navigation-case></navigation-rule>Jsf頁面的實現(xiàn):<h:commandButtonid=“sumbit“action=“out”value=”跳轉"/>

Jsf的頁面跳轉復雜跳轉,通過方法實現(xià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的頁面跳轉復雜跳轉,通過方法實現(xiàn)Jsf頁面的實現(xiàn):<h:commandButtonid=“sumbit“

actionListener="#{bean.action“value=”跳轉"/>方法實現(xiàn):publicStringaction(){//復雜邏輯Stringresult=“error”; try{ result=“success”; }catch(Exceptionex){ result=“error”; } returnresult;}數(shù)據(jù)轉換與驗證轉換器(Converter)協(xié)助模型與視圖之間的數(shù)據(jù)轉換驗證器(Validator)協(xié)助進行語意檢驗(SemanticValidation)標準轉換器HTTP字符串Java對象對于基本數(shù)據(jù)類型(primitivetype)或是其Wrapper類,JSF會使用javax.faces.Boolean、javax.faces.Byte……等自動進行轉換對于BigDecimal、BigInteger,則會使用javax.faces.BigDecimal、javax.faces.BigInteger自動進行轉換對于DateTime、Number,可以使用<f:convertDateTime>、<f:convertNumber>標簽進行轉換,它們各自提供有一些簡單的屬性,可以讓我們在轉換時指定一些轉換的格式細節(jié):

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

自定義轉換器實現(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使用轉換器:

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

自定義驗證器實現(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屬性來使用自定義驗證器。自定義驗證器配置文件加上驗證器:<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>自定義驗證器驗證器代碼: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);}}}錯誤信息處理預定義的錯誤信息可以使用<h:messages>或<h:message>標簽顯示出來通過提供一個信息資源文件可以修改預定義的錯誤信息MyFaces提供了支持中文的錯誤信息文件Messages_zh_CN.properties也可以在程序中使用FacesMessage來提供信息自定義轉換/驗證標簽使用<f:attribute>標簽來設定屬性:<f:attributename="pattern"value=".+[0-9]+"/>

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

事件處理動作事件(ActionEvent)即時事件(ImmediateEvent)值變事件(ValueChangeEvent)階段事件(PhaseEvent)動作事件(ActionEvent)通過action屬性綁定一個事件方法:<h:commandButtonvalue="提交"action="#{user.verify}"/>

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

即時事件(ImmediateEvent)

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

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

值變事件(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>階段事件(PhaseEvent)重建視圖(RestoreView) 依客戶端傳來的session數(shù)據(jù)或服務器端上的session數(shù)據(jù),重建JSF視圖組件。套用請求值(ApplyRequestValues)

JSF視圖組件各自獲得請求中的屬于自己的值,包括舊的值與新的值。執(zhí)行驗證(ProcessValidations) 轉換為對象并進行驗證。更新模型值(UpdateModelValues) 更新Bean或相關的模型值。喚起應用程序(InvokeApplication) 執(zhí)行應用程序相關邏輯。繪制響應頁面(RenderResponse) 對先前的請求處理完之后,產(chǎn)生頁面以反應客戶端執(zhí)行結果。階段事件(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_PHASEJSF標簽標準標簽輸出類標簽輸入類標簽命令類標簽選擇類標簽其他標簽表格處理JSF標準標簽輸出(Outputs)其名稱以output作為開頭,作用為輸出指定的信息或綁定值。輸入(Inputs)其名稱以input作為開頭,其作用為提供使用者輸入框。命令(Commands)其名稱以command作為開頭,其作用為提供命令或鏈接按鈕。選擇(Selections)其名稱以select作為開頭,其作用為提供使用者選項的選取。其它包括了form、message、messages、graphicImage等等未分類的標簽。標準HTML標簽的屬性屬性名稱適用說明id所有組件可指定id名稱,以讓其它標簽或組件參考binding所有組件綁定至UIComponentrendered所有組件是否顯示組件styleClass所有組件設定Cascadingstylesheet(CSS)value輸入、輸出、命令組件設定值或綁定至指定的值valueChangeListener輸入組件設定值變事件處理者converter輸入、輸出組件設定轉換器validator輸入組件設定驗證器required輸入組件是否驗證必填輸入框immediate輸入、命令組件是否為即時事件輸出類標簽outputLabel產(chǎn)生<label>HTML標簽,使用for屬性指定組件的clientID,例如:

<h:inputTextid="user"value="#{}"/> <h:outputLabelfor="user"value="#{}"/>outputLink產(chǎn)生<a>HTML標簽,搭配<f:param>可幫鏈結加上參數(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="#{}"/>

輸入類標簽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}"/>命令類標簽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}"/>

選擇類標簽選取框<h:selectBooleanCheckbox>單選單選按鈕<h:selectOneRadio>單選列表<h:selectOneListbox>單選菜單<h:selectOneMenu>復選復選框<h:selectManyCheckbox>復選列表<h:selectManyListbox>復選菜單<h:selectManyMenu>選擇類標簽的選項<f:selectItem>itemLabelitemValue或者value綁定一個傳回javax.faces.model.SelectItem的方法<f:selectItems>value綁定至一個提供傳回SelectItem的列表(數(shù)組)的方法

SelectItem:value,labelvalue綁定至一個提供傳回Map對象的方法

Map:label,value其他標簽<h:messages>或<h:message><h:graphicImage>圖片<h:panelGrid>排版本體間只能包括JSF組件,如果想要放入非JSF組件,例如簡單的樣版(template)文字,則要使用<f:verbatim>包括住。<h:panelGroup>包裝組件表格處理<h:dataTable>配合<h:column>實現(xiàn)以表格的方式顯示數(shù)據(jù)<f:facet>header與footer分別表示表頭和表尾使用DataModel處理復雜的數(shù)據(jù)Jsf上下文對象獲取Request變量獲?。喝绾稳〉妹Q為“data“的傳入?yún)?shù)值Mapparams=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

Stringdata=(String)params.get("data");Jsf上下文對象獲取session變量獲?。喝绾稳〉妹Q為“UserInfo“的對象值UserInfoUser=(UserInfo)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(“UserInfo”);

System.out.println(User.UID);

System.out.println(User.UPwd);

Primefaces簡介JavaServerFaces+AJAX=PrimefacesRichJSFComponentsprimefaces控件JSF控件的執(zhí)行過程三、Seam(JSF與JPA的橋梁)Seam簡介上下文組件模型對象關系映射遠程訪問對象注解EL表達式JBoss-tools自動生成項目骨架JBossSeam是一個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中的兩個核心概念是context(上下文)思想和component(組件)思想。組件是具有狀態(tài)的對象,通常是EJB,也可以是POJO對象,組件的實例會和上下文綁定,在此上下文中具有一個名字。上下文組件模型@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.對象關系映射Java持久化架構HibernateJPASeam管理的事務

Seam為事務的開始,提交,回滾,同步提供了一個事務管理抽象Seam管理的持久化上下文在Seam管理的持久化上下文中使用JPA使用Seam管理的Hibernate會話Seam注解一用于定義組件的注解

@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)用結束后注射出Seam組件屬性到上下文變量關于組件生命周期方法的注解

@Create當組件實例被Seam初始化時,該方法應被調(diào)用Seam注解二用于在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轉換器(JSFconverter)。@Validator允許一個Seam組件作為JSF驗證器(JSFValidator)。用于和Servlet容器集成的注解Filter(around={"seamComponent","otherSeamComponent"})使一個用@Filter注解的Seam組件(它實現(xiàn)了javax.servlet.Filter接口)作為一個Servlet過濾器(Filter)使用。它將會被Seam的主Filter執(zhí)行EL表達式一 JSF的表達式語言(EL)的形式跟jSP的表達式語言的形式類似:#{...}。EL的主要用途是使

溫馨提示

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

評論

0/150

提交評論