第三章 Struts標(biāo)簽與數(shù)據(jù)驗證_第1頁
第三章 Struts標(biāo)簽與數(shù)據(jù)驗證_第2頁
第三章 Struts標(biāo)簽與數(shù)據(jù)驗證_第3頁
第三章 Struts標(biāo)簽與數(shù)據(jù)驗證_第4頁
第三章 Struts標(biāo)簽與數(shù)據(jù)驗證_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章Struts標(biāo)簽與數(shù)據(jù)驗證上節(jié)回顧

Struts2中Action的配置Action的動態(tài)調(diào)用Action中如何訪問ServletAPI對象Result的類型及配置主要內(nèi)容Struts2標(biāo)簽庫的使用

UI標(biāo)簽非UI標(biāo)簽

OGNL語言及使用OGNL如何訪問對象

本講目標(biāo)Struts2標(biāo)簽庫的使用

UI標(biāo)簽非UI標(biāo)簽

OGNL語言及使用Struts標(biāo)簽庫簡介Struts2提供了一套標(biāo)簽庫,但是并沒有像JSTL或者Struts1.x的標(biāo)簽庫那樣進(jìn)行分類,所有Struts2的標(biāo)簽前綴都是以s開始如何在JSP頁面引入Struts2標(biāo)簽庫呢<%@taglibprefix="s"uri="/struts-tags"%>雖然struts2提供的標(biāo)簽庫沒有明確的分類,但是通常開發(fā)人員將Struts2的標(biāo)簽分為i兩類UI標(biāo)簽非UI標(biāo)簽數(shù)據(jù)標(biāo)簽控制標(biāo)簽Struts2UI標(biāo)簽常用表單標(biāo)簽標(biāo)簽說明<s:form>…</s:form>表單標(biāo)簽<s:textfield>…</s:textfield>文本輸入框<s:password>…</s:password>密碼輸入框<s:textarea>…</s:textarea>文本域輸入框<s:radio>…</s:radio>單選按鈕<s:checkbox>…</s:checkbox>多選框<s:submit/>提交標(biāo)簽<s:reset/>重置標(biāo)簽<s:hidden/>隱藏域標(biāo)簽Struts2UI標(biāo)簽表單標(biāo)簽使用:<s:formaction=“”method=“”namespace=“”>定義一個form表單域<s:textfieldkey=“”label=“”name=“”value=“”>定義一個文本框<s:passwordkey=“”label=“”name=“”value=“”>定義一個密碼框<s:radioname=“”list=“”listKey=“”listValue=“”>定義一組單選按鈕<s:selectlist=“”name=“”>選擇框Struts2UI標(biāo)簽庫表單元素<s:comboboxname=“”headerKey=“”headerValue=“”list=“”>主要是指一個下拉框和一個單行文本框的組合,它既允許用戶直接在文本框中輸入值,也允許用戶從下拉列表中選擇值<s:chekboxname=“”fieldvalue=“”value=“”>復(fù)選框,但是注意的時,該復(fù)選框提交的值要么為false要么為true<s:checkboxlistname=“”list=“”value=“”>修改struts.xml文件Struts2表單標(biāo)簽…<struts> <!--設(shè)置用戶界面主題,默認(rèn)值為xhtml風(fēng)格-->

<constantname="struts.ui.theme"value="simple"/> <packagename="default"namespace="/"extends="struts-default"> <actionname="login"class="cn.jbit.strutsdemo.LoginAction"> <resultname="success">/success.jsp</result> <resultname="fail">/fail.jsp</result> </action> </package></struts>更改默認(rèn)主題風(fēng)格修改JSP頁面Struts2表單標(biāo)簽<%@taglibprefix="s"uri="/struts-tags"%>…<s:formaction="/login.action"> <div>

用戶名:

<s:textfieldname="username"/> </div> <div>

碼:

<s:passwordname="password"/> </div> <inputtype="submit"value="提交"/></s:form> 必須導(dǎo)入Struts2標(biāo)簽庫<%@taglibprefix="s"uri="/struts-tags"%>…<h1>

登錄成功</h1><div>

歡迎您,

<s:propertyvalue="username"/>!</div> Struts2UI標(biāo)簽其他控件的使用日歷控件Struts2也提供了日歷控件的使用但是需要struts-dojo-plugin.jar的支持同時需要在JSP的頭部引入<%@tagliburi="/struts-dojo-tags"prefix="sx"%>在JSP的<head></head>中使用<sx:head/><sx:datetimepickername=“”displayFormat=“”value=“”>Struts2非UI標(biāo)簽控制標(biāo)簽<s:iftest=“”><s:elseiftest=“”><s:if>test判斷一個條件是否為true,為true執(zhí)行標(biāo)簽體內(nèi)的內(nèi)容,否則不執(zhí)行標(biāo)簽體內(nèi)的內(nèi)容Struts2非UI標(biāo)簽控制標(biāo)簽<s:iterator>迭代器標(biāo)簽被用來迭代一個值,這個值可以是java.util.Collection或java.util.Iterator中的任何一種。<s:iteratorvalue=“”var=“”status=“”end=“”start=“”>在<s:iterator>中,包含有一個“status”屬性,它被用來聲明一個IteratorStatus類的變量名。IteratorStatus類是用來獲得有關(guān)迭代狀態(tài)的信息的。支持的屬性有index、count、first、last、odd、even等等Struts2非UI標(biāo)簽控制標(biāo)簽<s:sort>標(biāo)簽被用來使用java.util.Comparator對List進(jìn)行排序。<s:sortcomparator=""></s:sort>Struts2非UI標(biāo)簽庫創(chuàng)建一個比較器Struts2非UI標(biāo)簽控制標(biāo)簽<s:subset>標(biāo)簽被用來輸出一個迭代器元素的子集合或一部分source待截取的集合start開始的位置count截取的個數(shù)Struts2非UI標(biāo)簽數(shù)據(jù)標(biāo)簽<s:set>標(biāo)簽被用來將一個值賦給一個特定作用域(application、session、request、page或action)的變量,action是默認(rèn)作用域。<s:setvar=""scope=""value="">value設(shè)置的變量值var設(shè)置的變量名scope設(shè)置變量的范圍Struts2非UI標(biāo)簽數(shù)據(jù)標(biāo)簽<s:bean>標(biāo)簽用來在JSP頁面中實例化一個對象,其作用就像<jsp:userBean><s:beanname=“”var=“”>name需要實例化的Bean的完整類名var實例化后Bean對象的對象名可以通過<s:param>為實例化的bean傳遞參數(shù),如:Struts2非UI標(biāo)簽數(shù)據(jù)標(biāo)簽<s:date>標(biāo)簽被用來以兩種方式格式化Date對象:自定義日期格式(比如:“yyyy-MM-dd”);使用“nice”屬性,用來將日期格式化為一種易讀的符號,如“thisdateis162daysago”。<s:datename=“”format=“”nice=“”var=“”>注意format和nice只能選其中之一Struts2配置文件struts.xmlconstant元素配置常量,可以改變Struts2框架的一些行為name屬性表示常量名稱,value屬性表示常量值 …<struts>

<constantname="struts.i18n.encoding"value="UTF-8"/>

<constantname="struts.ui.theme"value="simple"/>

<packagename=""namespace=""extends=""> <actionname=""class=""> <resultname=""></result> </action> </package></struts>Struts2配置文件struts-default.xml

Struts2默認(rèn)配置文件,會自動加載struts-default包在struts-default.xml文件中定義struts-plugin.xml

Struts2插件使用的配置文件如果不開發(fā)插件,不需要編寫該配置文件加載順序struts-default.xml—>struts-plugin.xml —>struts.xml—>web.xmlStruts常量配置常量建議在struts.xml中配置因為常量可以在下面多個配置文件中進(jìn)行定義,所以我們需要了解struts2加載常量的搜索順序:struts-default.xmlstruts-plugin.xmlstruts.xmlpertiesweb.xml如果在多個文件中配置了同一個常量,則后一個文件中配置的常量值會覆蓋前面文件中配置的常量值.OGNL基礎(chǔ)數(shù)據(jù)轉(zhuǎn)移和類型轉(zhuǎn)換開發(fā)Web應(yīng)用程序中最常見的一個任務(wù)是從基于字符串的HTTP請求向Java語言的不同數(shù)據(jù)類型移動和轉(zhuǎn)換數(shù)據(jù)數(shù)據(jù)轉(zhuǎn)移和類型轉(zhuǎn)換上發(fā)生在請求處理周期的兩端Struts2提供了強大的數(shù)據(jù)轉(zhuǎn)移和類型轉(zhuǎn)換功能,由框架自動完成誰幫助Struts2提供了這個“魔力”??是OGNL!

OGNLOGNL ObjectGraphicNavigationLanguage對象導(dǎo)航圖語言,是一個開源框架。取代頁面中Java腳本,簡化數(shù)據(jù)訪問。和EL同屬于表達(dá)式語言Struts2采用OGNL作為默認(rèn)表達(dá)式語言與EL相比,OGNL提供了更為強大功能不僅僅可以訪問對象的屬性,也可以訪問對象的方法支持靜態(tài)方法和靜態(tài)屬性的訪問操作集合對象OGNL的作用OGNL在Struts2中的作用表達(dá)式語言將表單或Struts2標(biāo)簽與特定的Java數(shù)據(jù)綁定起來,用來將數(shù)據(jù)移入、移出框架類型轉(zhuǎn)換數(shù)據(jù)進(jìn)入和流出框架,頁面中數(shù)據(jù)的字符串版本和Java數(shù)據(jù)類型之間都發(fā)生轉(zhuǎn)換OGNL基礎(chǔ)OGNL上下文OGNL表達(dá)式的計算圍繞OGNL上下文進(jìn)行由ognl.OgnlContext類表示,實現(xiàn)了Map接口OGNL上下文中可以以鍵值對的形式包含多個對象,可以將其中一個指定為根對象訪問根對象,直接書寫對象的屬性訪問其他對象必須使用“#key”前綴OGNLStruts2中的OGNLContext實現(xiàn)者為ActionContext,它結(jié)構(gòu)示意圖如下:ValueStack(值棧,它是根對象)OGNLContextparametersrequestsessionapplicationattr當(dāng)Struts2接受一個請求時,會迅速創(chuàng)建ActionContext,ValueStack,action。然后把action存放進(jìn)ValueStack,所以action的實例變量可以被OGNL訪問。OGNL訪問上下文(Context)中的對象需要使用#符號標(biāo)注命名空間,如#application、#session另外OGNL會設(shè)定一個根對象(root對象),在Struts2中根對象就是ValueStack(值棧)

。如果要訪問根對象(即ValueStack)中對象的屬性,則可以省略#命名空間,直接訪問該對象的屬性即可。在struts2中,根對象ValueStack的實現(xiàn)類為OgnlValueStack,該對象不是我們想像的只存放單個值,而是存放一組對象。在OgnlValueStack類里有一個List類型的root變量,就是使用他存放一組對象Struts2下使用OGNL訪問非值棧對象非值棧對象訪問方式等價訪問方式application#application.username#application['username']application.getAttribute("username")session#session.username#session['username']session.getAttribute("userName")request#request.username#request['username']request.getAttribute("username")parameters#parameters.username#parameters['username']

request.getParameter("username")attr#attr.username#attr['username']按pageContext–>request–>session–>application順序查找訪問非值棧對象Struts2下使用OGNL<%-- request.setAttribute("age",10); session.setAttribute("username","jbit"); application.setAttribute("count",5); --%><s:setname="age"value="10"scope="request"/><s:setname="username"value="'jbit'"scope="session"/><s:setname="count"value="5"scope="application"/> #request.age:<s:propertyvalue="#request.age"/><br/>#session.username:<s:propertyvalue="#session.username"/><br/>#application.count:<s:propertyvalue="#application.count"/><br/>#attr.count:<s:propertyvalue="#attr.count"/><br/> ======================================<br><s:setname="country1"value="China"/> <s:setname="country2"value="'China'"/>#country1:<s:propertyvalue="#country1"/><br/>#country2:<s:propertyvalue="#country2"/><br/> #request.country2:<s:propertyvalue="#request.country2"/><br/> <s:set>標(biāo)簽將一個值賦給指定范圍的變量<s:property>標(biāo)簽用于輸出指定對象的屬性值注意兩者的區(qū)別訪問非值棧對象Struts2下使用OGNL<html> ... <body> <s:setname="myurl"value="''"/> 1:<s:urlvalue="#myurl"/> <br> 2:<s:urlvalue="%{#myurl}"/><br> ========================================<br/> 3:<s:propertyvalue="#myurl"/><br/> 4:<s:propertyvalue="%{#myurl}"/><br> ========================================<br/> 5:<s:urlvalue=""/><br> 6:<s:urlvalue="''"/><br> </body></html>為避免出錯,如果分不清一個屬性值的類型是不是字符串類型的,可以直接加上%{...}OGNL |--request |--applicationContext|--OgnlValueStackroot變量[action,OgnlUtil,...] |--session |--attr |--parameters在root變量中處于第一位的對象叫棧頂對象。通常我們在OGNL表達(dá)式里直接寫上屬性的名稱即可訪問root變量里存放的對象的屬性,搜索順序是從棧頂對象開始尋找,如果棧頂對象不存在該屬性,就會從第二個對象尋找,如果沒有找到就從第三個對象尋找,依次往下訪問,直到找到為止。

注意:Struts2中的OGNL需要在Struts2的標(biāo)簽中使用OGNL由于ValueStack(值棧)是Struts2中OGNL的根對象,如果用戶需要訪問值棧中的對象,在JSP頁面可以直接通過下面的EL表達(dá)式訪問ValueStack(值棧)中對象的屬性:${foo}//獲得值棧中某個對象的foo屬性如果需要訪問context中其他對象,需要在命名空間前加#parameters對象:用于訪問HTTP中的請求參數(shù),#parameters.pwdrequest對象:用于訪問HttpServletRequest對象的屬性session對象:用于訪問HttpSession對象的屬性,#session.userapplication對象:用于訪問ServletContext對象的屬性attr對象:用于按>request->session->application順序訪問屬性O(shè)GNL使用OGNL創(chuàng)建集合對象如果需要一個集合元素的時候(例如List對象或者M(jìn)ap對象),可以使用OGNL中同集合相關(guān)的表達(dá)式。創(chuàng)建list對象<s:setname="list"value=“#{'zhangming','xiaoi','liming'}"/>創(chuàng)建Map對象<s:setname="foobar"value="#{'foo1':'bar1','foo2':'bar2'}"/>訪問集合元素Struts2下使用OGNL<s:setname="list"value="{'ACCP','BENET','BETEST'}"/>#list[0]:<s:propertyvalue="#list[0]"/><br/>#list[2]:<s:propertyvalue="#list[2]"/><br/>#list.size:<s:propertyvalue="#list.size"/><br/>list-iterator:<s:iteratorvalue="#list"> <s:property/> </s:iterator>訪問列表<s:setname="array"value="newint[]{1,2,3,4}"/>#array[0]:<s:propertyvalue="#array[0]"/><br/>#array[2]:<s:propertyvalue="

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論