




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1.OGNL達式語言OGN 是 ObjectGraphicNavigationLanguage(對象圖導航語言)的縮寫,它是一個開源項目。Struts2 框架使用 OGN 蚱為默認的表達式語言。相對 EL 表達式,它提供了平時我們需要的一些功能,如:支持對象方法調用,如 xxx.sayHello();支持類靜態(tài)方法調用和值訪問,表達式的格式為類全名(包才 S 包路徑)方法名|值名,例如:java.lang.Stringformat(foo%s,bar)或cn.itcast.ConstantAPP_NAME 操作集合對象。一Ognl 有一個上下文(Context)概念,說白了上下文就是一個 MA
2、P 吉構,它實現(xiàn)了java.utils.Map 接口,在 Struts2 中上下文(Context)的實現(xiàn)為 ActionContext,下面是上下文(Context)的結構示意圖2 .訪問上下文(Context)中的對象需要使用#符號標注命名空間,如#application、#session另外 OGN 會設定一個根對象(root 對象),在 Struts2 中根對象就是 ValueStack(值棧)。如果要訪問根對象(即 ValueStack)中對象的屬性,則可以省略#命名空間,直接訪問該對象的屬性即可。在 struts2 中,根對象 ValueStack 的實現(xiàn)類為 OgnlValueS
3、tack,該對象不是我們想像的只存放單個值,而是存放一組對象。在 OgnlValueStack 類里有一個 List 類型的 root 變量,就是使用他存放一組對象|-request|-applicationcontext|-OgnlValueStackroot 變量action,OgnlUtil,.|-session|-attr|-parameters在 root 變量中處于第一位的對象叫棧頂對象。通常我們在 OGNLS 達式里直接寫上屬性的名稱即可訪問 root 變量里對象的屬性,搜索順序是從棧頂對象開始尋找,如果棧頂對象不存在該屬性,就會從第二個對象尋找,如果沒有找到就從第三個對象尋找,
4、依次往下訪問,直到找到為止。大家注意:Struts2 中,OGNLS 達式需要配合 Struts 標簽才可以使用。如:3 .由于 ValueStack(值棧)是 Struts2 中 OGNL 勺根對象,如果用戶需要訪問值棧中的對象,在 JSP 頁面可以直接通過下面的 EL 表達式訪問 ValueStack(值棧)中對象的屬性:$foo/獲得值棧中某個對象的 foo 屬性如果訪問其他 Context 中的對象, 由于他們不是根對象, 所以在訪問時, 需要添加#前綴。application 對象:用于訪問 ServletContext,例如#application.userName 或#appli
5、cationuserName,相當于調用 ServletContext 的getAttribute(username)。session 對象:用來訪問 HttpSession,例如#session.userName 或者#sessionuserName,相當于調用 session.getAttribute(userName)。request 對象:用來訪問 HttpServletRequest 屬性(attribute)的 Map 例如#request.userName 或者#requestuserName,相當于調用request.getAttribute(userName)。paramet
6、ers 對象:用于訪問 HTTP 勺請求參數(shù),例如#parameters.userName 或者#parametersuserName,相當于調用 request.getParameter(username)。attr 對象:用于按 page-request-session-application 順序訪問其屬性。4 .為何使用 EL 表達式能夠訪問 valueStack 中對象的屬性原因是 Struts2 對 HttpServletRequest 作了進一步的封裝。簡略代碼如下: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 達式創(chuàng)建 List/Map 集合對象如果需要一個集合元素的時候(例如 List對象或者 Map 對象),可以使用 OGNL 中同集合相關的表達式。使用如下代碼直接生成一個 List 對象:生成一個 Map 對象:=Set 標簽用于將某個值放入指定范圍。scope:指定變量被放置的范圍,該屬性可以接受 application、sessionrequest、page 或 action。如果沒有設置該屬性,則默認放置在 OGNlContext中。value:賦給變
9、量的值.如果沒有設置該屬性,則將 ValueStack 棧頂?shù)闹蒂x給變量。6 .采用 OGNLS 達式判斷對象是否存在于集合中對于集合類型,OGN 表達式可以使用 in 和 notin 兩個元素符號。其中,in 表達式用來判斷某個元素是否在指定的集合對象中;notin 判斷某個元素是否不在指定的集合對象中,如下所示。in 表達式:在不在notin 表達式:不在在7.OGNL達式的投影功能除了 in 和 notin 之外,OGN 還允許使用某個規(guī)則獲得集合對象的子集,常用的有以下 3 個相關操作符。?:獲得所有符合邏輯的元素。A:獲得符合邏輯的第一個元素。$:獲得符合邏輯的最后一個元素。例如代碼
10、:35-$在上面代碼中,直接在集合后緊跟.運算符表明用于取出該集合的子集,內的表達式用于獲取符合條件的元素,this 指的是為了從大集合 books 篩選數(shù)據(jù)到小集合,需要對大集合 books 進行迭代,this 代表當前迭代的元素。本例的表達式用于獲取集合中價格大于 35 的書集合。publicclassBookActionextendsActionSupportprivateListbooks;OverridepublicStringexecute()books=newLinkedList();books.add(newBook(A735619678,spring,67);books.ad
11、d(newBook(B435555322,ejb3.0,15);8 .property 標簽property 標簽用于輸出指定值:default:可選屬性,如果需要輸出的屬性值為 null,則顯示該屬性指定的值escape:可選屬性,指定是否格式化 HTML 弋碼。value:可選屬性, 指定需要輸出的屬性值, 如果沒有指定該屬性, 則默認輸出 ValueStack棧頂?shù)闹怠d:可選屬性,指定該元素的標識9 .iterator 標簽iterator 標簽用于對集合進行迭代,這里的集合包含 List、Set 和數(shù)組。fontcolor=redbluevalue:可選屬性,指定被迭代的集合,如果
12、沒有設置該屬性,則使用 ValueStack 棧頂?shù)募?。id:可選屬性,指定集合里元素的 id。status:可選屬性,該屬性指定迭代時的 IteratorStatus 實例。該實例包含如下幾個方法:intgetCount()intgetIndex()booleanisEven()booleanisOdd()booleanisFirst()booleanisLast()返回當前迭代了幾個元素返回當前迭代元素的索引,返回當前被迭代元素的索引是否是偶數(shù),返回當前被迭代元素的索引是否是奇數(shù),返回當前被迭代元素是否是第一個元素。,返回當前被迭代元素是否是最后一個元素。10.if/elseif/els
13、e 標簽2321都不等10.url 標簽生成類似如下路徑:/struts/test/helloworld_add.action?personid=23紅色部分為內容路徑。一當標簽的屬性值作為字符串類型處理時,“%符號的用途是計算的值。輸出結果:#myurlhttp:/OGN 威達式11.表單標簽_checkboxlist 復選框如果集合為 list生成如下 html 代碼:Java.NetRoRPHP如果集合為 MAP生成如下 html 代碼:瑜珈用品戶外用品球類自行車12 .表單標簽_checkboxlist 復選框如果集合里存放的是 javabean%Personperson1=newPerson(1,第一個);Personperson2=newPerson(2,第二個);Listlist=newArrayList();list.add(person1);list.add(person2);request.setAttribute(persons,list);%Personid 和 namePerson 的屬性生成如下 html 代碼:第一個第二個13 .表單標簽_ra
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國益生元纖維行業(yè)產業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國白酒原料行業(yè)產業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國電子書閱讀器行業(yè)深度研究及發(fā)展前景投資評估分析
- 2025至2030中國特殊標志信標浮標行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 支付寶的交易流程
- 施工管理培訓計劃
- 醫(yī)療領域中心理干預對患者康復的影響
- 教育行業(yè)大數(shù)據(jù)未來的增長機會與挑戰(zhàn)
- 教育信息化進程中的智能教學平臺探討
- 教育技術領域的新成果探討
- 安全教育培訓:實現(xiàn)安全文明施工
- 2025至2030分布式能源行業(yè)市場深度調研及發(fā)展規(guī)劃及有效策略與實施路徑評估報告
- 反邪教宣講課件
- 2025年全國統(tǒng)一高考英語Ⅰ卷(含答案)
- 1 感受生活中的法律 課件-道德與法治六年級上冊統(tǒng)編版
- 中醫(yī)集市活動方案
- 2025年江蘇省南京市中考歷史試卷(含解析)
- 腫瘤隨訪登記培訓
- 勞動仲裁內部培訓
- 工廠注塑考試題及答案
- 腫瘤登記培訓課件
評論
0/150
提交評論