我心飛翔
慢慢的度過
BlogJava
首頁
新隨筆
聯系
聚合
管理
隨筆-200 評論-148 文章-15 trackbacks-0
OGNL表達式struts2標簽“%,#,$”
一、什么是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>
posted on 2010-10-28 10:25
無聲
閱讀(78792)
評論(6)
編輯
收藏
所屬分類:
職場生活
評論:
#
re: OGNL表達式struts2標簽“%,#,$” 2010-12-31 11:25 |
383392964
能否為:<result type="${result}">listUser.action?msg=${msg}</result>
QQ:383392964,qqE-mail我,謝謝啦
回復
更多評論
#
re: OGNL表達式struts2標簽“%,#,$” 2013-03-01 16:31 |
9
1234567890
回復
更多評論
#
re: OGNL表達式struts2標簽“%,#,$” 2013-06-19 11:27 |
asda
dasds
回復
更多評論
#
re: OGNL表達式struts2標簽“%,#,$”[未登錄] 2014-04-14 23:29 |
等待
頂頂頂
回復
更多評論
#
re: OGNL表達式struts2標簽“%,#,$” 2014-05-29 14:18 |
路飛
不錯,講的很詳細!
回復
更多評論
#
是[未登錄]
2014-09-04 08:51 |
dd
很好
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
kettle ETL java 調用 kettle job 或 transfer
轉win8 64位+Oracle 11g 64位下使用PL/SQL Developer 的解決辦法
Java 獲取當前日期和時間
清除目錄下的SVN信息
Linux下使用gzip壓縮與解壓文件
Linux 下ftp自動登錄
struts1.x防止重復提交
C#正則表達式小結
jbpm4 java.lang.LinkageError: loader constraint violation 包沖突
c#web定時任務
道可道非常道,名可名非常名
<
2010年10月
>
日
一
二
三
四
五
六
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(5)
給我留言
查看公開留言
查看私人留言
我參與的團隊
JLive開發團隊(0/0)
隨筆分類
(174)
回歸自然(9)
職場生活(165)
隨筆檔案
(200)
2014年3月 (2)
2014年1月 (1)
2013年9月 (2)
2013年2月 (1)
2013年1月 (2)
2012年8月 (1)
2012年6月 (1)
2012年1月 (1)
2011年12月 (1)
2010年12月 (3)
2010年11月 (10)
2010年10月 (12)
2010年9月 (3)
2010年8月 (5)
2010年7月 (3)
2010年6月 (3)
2010年5月 (1)
2010年4月 (1)
2010年2月 (2)
2010年1月 (2)
2009年11月 (1)
2009年8月 (1)
2009年3月 (3)
2009年2月 (7)
2008年12月 (1)
2008年11月 (1)
2008年9月 (3)
2008年8月 (4)
2008年7月 (4)
2008年6月 (8)
2008年5月 (4)
2008年4月 (4)
2008年2月 (2)
2008年1月 (9)
2007年12月 (11)
2007年11月 (1)
2007年10月 (6)
2007年9月 (1)
2007年8月 (2)
2007年7月 (1)
2007年6月 (1)
2007年5月 (6)
2007年4月 (6)
2006年12月 (9)
2006年11月 (7)
2006年10月 (9)
2006年9月 (5)
2006年7月 (12)
2006年6月 (14)
文章分類
(20)
AJAX(3)
Ant(1)
Delphi(1)
Eclipse(1)
Hibernate(3)
java共享代碼(5)
JBOSS(1)
JSF
linux(4)
Oracle(1)
Spring
sqlserver2000
Struts
Tapestry
webspehre
文章檔案
(15)
2007年6月 (2)
2006年11月 (1)
2006年10月 (5)
2006年6月 (7)
收藏夾
共享代碼
開源網站
ajax中國
finereport
hibernate
Java開源大全
java技術論壇
java論壇
java論壇
用戶名parable
linux伊甸園
luanyong
oracle下載
oracle資源
Struts插件
這個插件功能強大,包括JSF,struts,hibernate等
unix論壇
開源力量社區
源程序網站
資料中心
資源網站
parable
朋友博客
東東男
我的博客
最新隨筆
1.?kettle ETL java 調用 kettle job 或 transfer
2.?etl一個例子
3.?論壇
4.?Spring 3.2.4源碼編譯
5.?轉win8 64位+Oracle 11g 64位下使用PL/SQL Developer 的解決辦法
6.?crontab配置詳解
7.?將JSON轉換成MAP的工具類
8.? Java 獲取當前日期和時間
9.?清除目錄下的SVN信息
10.?Symantec 卸載密碼方法
搜索
最新評論
1.?re: 攔截器底層實現原理
政治
--ttt
2.?re: js動態修改表格
454545
--35454
3.?re: ajax局部刷新
jkkhhhl
--34
4.?re: 將JSON轉換成MAP的工具類
v instanceof JSONArray 這段代碼有問題
需要對
List<String>做處理
--丹丹
5.?re: 將JSON轉換成MAP的工具類
評論內容較長,點擊標題查看
--丹丹
閱讀排行榜
1.?OGNL表達式struts2標簽“%,#,$”(78792)
2.?linux 設置系統語言(44867)
3.? Java 獲取當前日期和時間(40394)
4.?Linux下使用gzip壓縮與解壓文件(30902)
5.?將JSON轉換成MAP的工具類(22073)
評論排行榜
1.? RHEL 5 Install Number(16)
2.?ajax局部刷新(8)
3.?RHEL4-U3-i386-AS下載地址(7)
4.?將JSON轉換成MAP的工具類(7)
5.?OGNL表達式struts2標簽“%,#,$”(6)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 無聲
主站蜘蛛池模板:
免费国产成人午夜在线观看
|
又长又大又粗又硬3p免费视频
|
免费91最新地址永久入口
|
高清在线亚洲精品国产二区
|
亚洲av无码成人影院一区
|
噼里啪啦电影在线观看免费高清
|
亚洲成年人电影网站
|
亚洲一级毛片免费观看
|
亚洲成综合人影院在院播放
|
57PAO成人国产永久免费视频
|
亚洲一区精彩视频
|
免费看大黄高清网站视频在线
|
国产99在线|亚洲
|
精品无码国产污污污免费
|
相泽南亚洲一区二区在线播放
|
国产v片免费播放
|
国产三级在线免费观看
|
国产精品亚洲片在线观看不卡
|
久久久久一级精品亚洲国产成人综合AV区
|
男男黄GAY片免费网站WWW
|
亚洲AⅤ视频一区二区三区
|
国产激情久久久久影院老熟女免费
|
亚洲愉拍99热成人精品热久久
|
久久国产精品2020免费m3u8
|
亚洲精品成人久久
|
免费毛片在线看片免费丝瓜视频
|
国产精品手机在线亚洲
|
在线观看国产区亚洲一区成人
|
99久久免费国产香蕉麻豆
|
亚洲av无码一区二区三区四区
|
亚洲国产一区二区视频网站
|
亚洲中文字幕无码中文字在线
|
日本免费在线中文字幕
|
日韩亚洲国产综合高清
|
亚洲日韩精品无码专区网站
|
最近中文字幕mv免费高清视频8
|
亚洲毛片基地4455ww
|
男人的天堂亚洲一区二区三区
|
无码av免费毛片一区二区
|
久久精品国产亚洲AV天海翼
|
久久久久久国产a免费观看黄色大片
|