struts2標(biāo)簽和OGNL表達(dá)式_第1頁
struts2標(biāo)簽和OGNL表達(dá)式_第2頁
struts2標(biāo)簽和OGNL表達(dá)式_第3頁
struts2標(biāo)簽和OGNL表達(dá)式_第4頁
struts2標(biāo)簽和OGNL表達(dá)式_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1.OGNL達(dá)式語言O(shè)GN 是 ObjectGraphicNavigationLanguage(對象圖導(dǎo)航語言)的縮寫,它是一個開源項目。Struts2 框架使用 OGN 蚱為默認(rèn)的表達(dá)式語言。相對 EL 表達(dá)式,它提供了平時我們需要的一些功能,如:支持對象方法調(diào)用,如 xxx.sayHello();支持類靜態(tài)方法調(diào)用和值訪問,表達(dá)式的格式為類全名(包才 S 包路徑)方法名|值名,例如:java.lang.Stringformat(foo%s,bar)或cn.itcast.ConstantAPP_NAME 操作集合對象。一Ognl 有一個上下文(Context)概念,說白了上下文就是一個 MA

2、P 吉構(gòu),它實現(xiàn)了java.utils.Map 接口,在 Struts2 中上下文(Context)的實現(xiàn)為 ActionContext,下面是上下文(Context)的結(jié)構(gòu)示意圖2 .訪問上下文(Context)中的對象需要使用#符號標(biāo)注命名空間,如#application、#session另外 OGN 會設(shè)定一個根對象(root 對象),在 Struts2 中根對象就是 ValueStack(值棧)。如果要訪問根對象(即 ValueStack)中對象的屬性,則可以省略#命名空間,直接訪問該對象的屬性即可。在 struts2 中,根對象 ValueStack 的實現(xiàn)類為 OgnlValueS

3、tack,該對象不是我們想像的只存放單個值,而是存放一組對象。在 OgnlValueStack 類里有一個 List 類型的 root 變量,就是使用他存放一組對象|-request|-applicationcontext|-OgnlValueStackroot 變量action,OgnlUtil,.|-session|-attr|-parameters在 root 變量中處于第一位的對象叫棧頂對象。通常我們在 OGNLS 達(dá)式里直接寫上屬性的名稱即可訪問 root 變量里對象的屬性,搜索順序是從棧頂對象開始尋找,如果棧頂對象不存在該屬性,就會從第二個對象尋找,如果沒有找到就從第三個對象尋找,

4、依次往下訪問,直到找到為止。大家注意:Struts2 中,OGNLS 達(dá)式需要配合 Struts 標(biāo)簽才可以使用。如:3 .由于 ValueStack(值棧)是 Struts2 中 OGNL 勺根對象,如果用戶需要訪問值棧中的對象,在 JSP 頁面可以直接通過下面的 EL 表達(dá)式訪問 ValueStack(值棧)中對象的屬性:$foo/獲得值棧中某個對象的 foo 屬性如果訪問其他 Context 中的對象, 由于他們不是根對象, 所以在訪問時, 需要添加#前綴。application 對象:用于訪問 ServletContext,例如#application.userName 或#appli

5、cationuserName,相當(dāng)于調(diào)用 ServletContext 的getAttribute(username)。session 對象:用來訪問 HttpSession,例如#session.userName 或者#sessionuserName,相當(dāng)于調(diào)用 session.getAttribute(userName)。request 對象:用來訪問 HttpServletRequest 屬性(attribute)的 Map 例如#request.userName 或者#requestuserName,相當(dāng)于調(diào)用request.getAttribute(userName)。paramet

6、ers 對象:用于訪問 HTTP 勺請求參數(shù),例如#parameters.userName 或者#parametersuserName,相當(dāng)于調(diào)用 request.getParameter(username)。attr 對象:用于按 page-request-session-application 順序訪問其屬性。4 .為何使用 EL 表達(dá)式能夠訪問 valueStack 中對象的屬性原因是 Struts2 對 HttpServletRequest 作了進(jìn)一步的封裝。簡略代碼如下:publicclassStrutsRequestWrapperextendsHttpServletRequestW

7、rapperpublicStrutsRequestWrapper(HttpServletRequestreq)super(req);publicObjectgetAttribute(Strings)ActionContextctx=ActionContext.getContext();Objectattribute=super.getAttribute(s);/先從 request 范圍獲取屬性值if(ctx!=null)if(attribute=null)/如果從 request 范圍沒有找到屬性值,即從ValueStack 中查找對象的屬性值ValueStackstack=ctx.getV

8、alueStack();attribute=stack.findValue(s);returnattribute;5 .采用 OGNLg 達(dá)式創(chuàng)建 List/Map 集合對象如果需要一個集合元素的時候(例如 List對象或者 Map 對象),可以使用 OGNL 中同集合相關(guān)的表達(dá)式。使用如下代碼直接生成一個 List 對象:生成一個 Map 對象:=Set 標(biāo)簽用于將某個值放入指定范圍。scope:指定變量被放置的范圍,該屬性可以接受 application、sessionrequest、page 或 action。如果沒有設(shè)置該屬性,則默認(rèn)放置在 OGNlContext中。value:賦給變

9、量的值.如果沒有設(shè)置該屬性,則將 ValueStack 棧頂?shù)闹蒂x給變量。6 .采用 OGNLS 達(dá)式判斷對象是否存在于集合中對于集合類型,OGN 表達(dá)式可以使用 in 和 notin 兩個元素符號。其中,in 表達(dá)式用來判斷某個元素是否在指定的集合對象中;notin 判斷某個元素是否不在指定的集合對象中,如下所示。in 表達(dá)式:在不在notin 表達(dá)式:不在在7.OGNL達(dá)式的投影功能除了 in 和 notin 之外,OGN 還允許使用某個規(guī)則獲得集合對象的子集,常用的有以下 3 個相關(guān)操作符。?:獲得所有符合邏輯的元素。A:獲得符合邏輯的第一個元素。$:獲得符合邏輯的最后一個元素。例如代碼

10、:35-$在上面代碼中,直接在集合后緊跟.運算符表明用于取出該集合的子集,內(nèi)的表達(dá)式用于獲取符合條件的元素,this 指的是為了從大集合 books 篩選數(shù)據(jù)到小集合,需要對大集合 books 進(jìn)行迭代,this 代表當(dāng)前迭代的元素。本例的表達(dá)式用于獲取集合中價格大于 35 的書集合。publicclassBookActionextendsActionSupportprivateListbooks;OverridepublicStringexecute()books=newLinkedList();books.add(newBook(A735619678,spring,67);books.ad

11、d(newBook(B435555322,ejb3.0,15);8 .property 標(biāo)簽property 標(biāo)簽用于輸出指定值:default:可選屬性,如果需要輸出的屬性值為 null,則顯示該屬性指定的值escape:可選屬性,指定是否格式化 HTML 弋碼。value:可選屬性, 指定需要輸出的屬性值, 如果沒有指定該屬性, 則默認(rèn)輸出 ValueStack棧頂?shù)闹?。id:可選屬性,指定該元素的標(biāo)識9 .iterator 標(biāo)簽iterator 標(biāo)簽用于對集合進(jìn)行迭代,這里的集合包含 List、Set 和數(shù)組。fontcolor=redbluevalue:可選屬性,指定被迭代的集合,如果

12、沒有設(shè)置該屬性,則使用 ValueStack 棧頂?shù)募?。id:可選屬性,指定集合里元素的 id。status:可選屬性,該屬性指定迭代時的 IteratorStatus 實例。該實例包含如下幾個方法:intgetCount()intgetIndex()booleanisEven()booleanisOdd()booleanisFirst()booleanisLast()返回當(dāng)前迭代了幾個元素返回當(dāng)前迭代元素的索引,返回當(dāng)前被迭代元素的索引是否是偶數(shù),返回當(dāng)前被迭代元素的索引是否是奇數(shù),返回當(dāng)前被迭代元素是否是第一個元素。,返回當(dāng)前被迭代元素是否是最后一個元素。10.if/elseif/els

13、e 標(biāo)簽2321都不等10.url 標(biāo)簽生成類似如下路徑:/struts/test/helloworld_add.action?personid=23紅色部分為內(nèi)容路徑。一當(dāng)標(biāo)簽的屬性值作為字符串類型處理時,“%符號的用途是計算的值。輸出結(jié)果:#myurlhttp:/OGN 威達(dá)式11.表單標(biāo)簽_checkboxlist 復(fù)選框如果集合為 list生成如下 html 代碼:Java.NetRoRPHP如果集合為 MAP生成如下 html 代碼:瑜珈用品戶外用品球類自行車12 .表單標(biāo)簽_checkboxlist 復(fù)選框如果集合里存放的是 javabean%Personperson1=newPerson(1,第一個);Personperson2=newPerson(2,第二個);Listlist=newArrayList();list.add(person1);list.add(person2);request.setAttribute(persons,list);%Personid 和 namePerson 的屬性生成如下 html 代碼:第一個第二個13 .表單標(biāo)簽_ra

溫馨提示

  • 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

提交評論