日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OGNL表达式struts2标签“%,#,$”

發布時間:2024/4/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OGNL表达式struts2标签“%,#,$” 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.blogjava.net/parable-myth/archive/2010/10/28/336353.html

  • 一、什么是OGNL,有什么特點? ??
  • ??
  • OGNL(Object-Graph?Navigation?Language),大概可以理解為:對象圖形化導航語言。是一種可以方便地操作對象屬性的開源表達式語言。OGNL有如下特點:? ??
  • ??
  • 1、支持對象方法調用,形式如:objName.methodName(); ??
  • ??
  • 2、支持類靜態的方法調用和值訪問,表達式的格式為@[類全名(包括包路)]@[方法名?|??值名],例如: ??
  • ??
  • @java.lang.String@format('foo?%s',?'bar')或@tutorial.MyConstant@APP_NAME; ??
  • ??
  • 3、支持賦值操作和表達式串聯,例如: ??
  • ??
  • price=100,?discount=0.8,?calculatePrice(),這個表達式會返回80; ??
  • ??
  • 4、訪問OGNL上下文(OGNL?context)和ActionContext; ??
  • ??
  • 5、操作集合對象。 ??
  • ??
  • ? ??
  • ??
  • 二、使用OGNL表達式 ??
  • ??
  • OGNL要結合struts標簽來使用。由于比較靈活,也容易把人給弄暈,尤其是“%”、“#”、“$”這三個符號的使用。由于$廣泛應用于EL中,這里重點寫%和#符號的用法。 ??
  • ??
  • 1、“#”符號有三種用途: ??
  • ??
  • (1)、訪問非根對象(struts中值棧為根對象)如OGNL上下文和Action上下文,#相當于ActionContext.getContext();下表有幾個ActionContext中有用的屬性: ??
  • ??
  • ? ??
  • ??
  • 名稱 ??
  • ?作用 ??
  • ?例子 ??
  • ? ??
  • parameters ??
  • ?包含當前HTTP請求參數的Map ??
  • ?#parameters.id[0]作用相當于request.getParameter("id")? ??
  • ? ??
  • request ??
  • ?包含當前HttpServletRequest的屬性(attribute)的Map ??
  • ?#request.userName相當于request.getAttribute("userName")? ??
  • ? ??
  • session ??
  • ?包含當前HttpSession的屬性(attribute)的Map ??
  • ?#session.userName相當于session.getAttribute("userName")? ??
  • ? ??
  • application ??
  • ?包含當前應用的ServletContext的屬性(attribute)的Map ??
  • ?#application.userName相當于application.getAttribute("userName")? ??
  • ? ??
  • ??
  • 注:attr?用于按request?>?session?>?application順序訪問其屬性(attribute),#attr.userName相當于按順序在以上三個范圍(scope)內讀取userName屬性,直到找到為止。用于過濾和投影(projecting)集合,如books.{?#this.price<100};構造Map,如#{'foo1':'bar1',?'foo2':'bar2'}。 ??
  • ??
  • ? ??
  • ??
  • (2)、用于過濾和投影(projecting)集合,如:?books.{?#this.price>35}?? ??
  • ??
  • books.{?#this.price>35} ??
  • ??
  • (3)、構造Map,如:?#{'foo1':'bar1',?'foo2':'bar2'}?? ??
  • ??
  • #{'foo1':'bar1',?'foo2':'bar2'}這種方式常用在給radio或select、checkbox等標簽賦值上。如果要在頁面中取一個map的值可以這樣寫:? ??
  • ??
  • <s:property?value="#myMap['foo1']"/>?? ??
  • ??
  • <s:property?value="#myMap['foo1']"/> ??
  • ??
  • 2、“%”符號的用途是在標簽的屬性值被理解為字符串類型時,告訴執行環境%{}里的是OGNL表達式。 ??
  • ??
  • 這是一開始最讓我不能理解的符號,原因是一些相關資源在表述時不太準備,經過一翻痛苦的探索,終于明白了它的用途。實際上就是讓被理解為字符串的表達式,被真正當成ognl來執行。很有點類似javascript里面的eval_r()功能,例如?: ??
  • ??
  • var?oDiv?=?eval_r("document.all.div"+index)?? ??
  • ??
  • var?oDiv?=?eval_r("document.all.div"+index) ??
  • ??
  • 當index變量為1時,語句就會被當作var?oDiv?=?document.all.div1??var?oDiv?=?document.all.div1來執行。%{}就是起這個作用。舉例:? ??
  • ??
  • <s:set?name="myMap"?value="#{'key1':'value1','key2':'value2'}"/>??? ??
  • ??
  • <s:property?value="#myMap['key1']"/>??? ??
  • ??
  • <s:url?value="#myMap['key1']"?/>? ??
  • ??
  • <s:set?name="myMap"?value="#{'key1':'value1','key2':'value2'}"/> ??
  • ??
  • <s:property?value="#myMap['key1']"/> ??
  • ??
  • <s:url?value="#myMap['key1']"/> ??
  • ??
  • 上面的代碼第2行會在頁面上輸出“value1”,而第3行則會輸出"#myMap['key1']"這么一個字符串。?如果將第3行改寫成這樣:? ??
  • ??
  • <s:url?value="%{#myMap['key1']}"/>?? ??
  • ??
  • <s:url?value="%{#myMap['key1']}"/> ??
  • ??
  • 則輸出為“value1”。 ??
  • ??
  • ? ??
  • ??
  • ? ??
  • ??
  • 這說明struts2里不同的標簽對ognl的表達式的理解是不一樣的。如果當有的標簽“看不懂”類似“#myMap['key1']”的語句時,就要用%{}來把這括進去,“翻譯”一下了。 ??
  • ??
  • 3、“$”有兩種用途 ??
  • ??
  • (1)、在國際化資源文件中,引用OGNL表達式。 ??
  • ??
  • (2)、在Struts?2配置文件中,引用OGNL表達式:? ??
  • ??
  • <action?name="saveUser"?class="userAction"?method="save"> ??
  • ??
  • <result?type="redirect">listUser.action?msg=${msg}</result> ??
  • ??
  • </action> ??
  • ??
  • <action?name="saveUser"?class="userAction"?method="save">???? ??
  • ??
  • <result?type="redirect">listUser.action?msg=${msg}</result> ??
  • ??
  • </action>?
  • ?

    總結

    以上是生活随笔為你收集整理的OGNL表达式struts2标签“%,#,$”的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。