我心飛翔
慢慢的度過
BlogJava
首頁
新隨筆
聯(lián)系
聚合
管理
隨筆-200 評論-148 文章-15 trackbacks-0
OGNL表達(dá)式struts2標(biāo)簽“%,#,$”
一、什么是OGNL,有什么特點(diǎn)?
OGNL(Object-Graph
Navigation
Language),大概可以理解為:對象圖形化導(dǎo)航語言。是一種可以方便地操作對象屬性的開源表達(dá)式語言。OGNL有如下特點(diǎn):
1
、支持對象方法調(diào)用,形式如:objName.methodName();
2
、支持類靜態(tài)的方法調(diào)用和值訪問,表達(dá)式的格式為@[類全名(包括包路)]@[方法名
|
值名],例如:
@java
.lang.String
@format
(
'foo
%s'
,
'bar'
)或
@tutorial
.MyConstant
@APP_NAME
;
3
、支持賦值操作和表達(dá)式串聯(lián),例如:
price=
100
,
discount=
0.8
,
calculatePrice(),這個(gè)表達(dá)式會返回
80
;
4
、訪問OGNL上下文(OGNL
context)和ActionContext;
5
、操作集合對象。
二、使用OGNL表達(dá)式
OGNL要結(jié)合struts標(biāo)簽來使用。由于比較靈活,也容易把人給弄暈,尤其是“%”、“#”、“$”這三個(gè)符號的使用。由于$廣泛應(yīng)用于EL中,這里重點(diǎn)寫%和#符號的用法。
1
、“#”符號有三種用途:
(
1
)、訪問非根對象(struts中值棧為根對象)如OGNL上下文和Action上下文,#相當(dāng)于ActionContext.getContext();下表有幾個(gè)ActionContext中有用的屬性:
名稱
作用
例子
parameters
包含當(dāng)前HTTP請求參數(shù)的Map
#parameters.id[
0
]作用相當(dāng)于request.getParameter(
"id"
)
request
包含當(dāng)前HttpServletRequest的屬性(attribute)的Map
#request.userName相當(dāng)于request.getAttribute(
"userName"
)
session
包含當(dāng)前HttpSession的屬性(attribute)的Map
#session.userName相當(dāng)于session.getAttribute(
"userName"
)
application
包含當(dāng)前應(yīng)用的ServletContext的屬性(attribute)的Map
#application.userName相當(dāng)于application.getAttribute(
"userName"
)
注:attr
用于按request
>
session
>
application順序訪問其屬性(attribute),#attr.userName相當(dāng)于按順序在以上三個(gè)范圍(scope)內(nèi)讀取userName屬性,直到找到為止。用于過濾和投影(projecting)集合,如books.{?#
this
.price<
100
};構(gòu)造Map,如#{
'foo1'
:
'bar1'
,
'foo2'
:
'bar2'
}。
(
2
)、用于過濾和投影(projecting)集合,如:
books.{?#
this
.price>
35
}
books.{?#
this
.price>
35
}
(
3
)、構(gòu)造Map,如:
#{
'foo1'
:
'bar1'
,
'foo2'
:
'bar2'
}
#{
'foo1'
:
'bar1'
,
'foo2'
:
'bar2'
}這種方式常用在給radio或select、checkbox等標(biāo)簽賦值上。如果要在頁面中取一個(gè)map的值可以這樣寫:
<s:property
value=
"#myMap['foo1']"
/>
<s:property
value=
"#myMap['foo1']"
/>
2
、“%”符號的用途是在標(biāo)簽的屬性值被理解為字符串類型時(shí),告訴執(zhí)行環(huán)境%{}里的是OGNL表達(dá)式。
這是一開始最讓我不能理解的符號,原因是一些相關(guān)資源在表述時(shí)不太準(zhǔn)備,經(jīng)過一翻痛苦的探索,終于明白了它的用途。實(shí)際上就是讓被理解為字符串的表達(dá)式,被真正當(dāng)成ognl來執(zhí)行。很有點(diǎn)類似javascript里面的eval_r()功能,例如
:
var
oDiv
=
eval_r(
"document.all.div"
+index)
var
oDiv
=
eval_r(
"document.all.div"
+index)
當(dāng)index變量為
1
時(shí),語句就會被當(dāng)作var
oDiv
=
document.all.div1
var
oDiv
=
document.all.div1來執(zhí)行。%{}就是起這個(gè)作用。舉例:
<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']"
這么一個(gè)字符串。
如果將第
3
行改寫成這樣:
<s:url
value=
"%{#myMap['key1']}"
/>
<s:url
value=
"%{#myMap['key1']}"
/>
則輸出為“value1”。
這說明struts2里不同的標(biāo)簽對ognl的表達(dá)式的理解是不一樣的。如果當(dāng)有的標(biāo)簽“看不懂”類似“#myMap[
'key1'
]”的語句時(shí),就要用%{}來把這括進(jìn)去,“翻譯”一下了。
3
、“$”有兩種用途
(
1
)、在國際化資源文件中,引用OGNL表達(dá)式。
(
2
)、在Struts
2
配置文件中,引用OGNL表達(dá)式:
<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
無聲
閱讀(78791)
評論(6)
編輯
收藏
所屬分類:
職場生活
評論:
#
re: OGNL表達(dá)式struts2標(biāo)簽“%,#,$” 2010-12-31 11:25 |
383392964
能否為:<result type="${result}">listUser.action?msg=${msg}</result>
QQ:383392964,qqE-mail我,謝謝啦
回復(fù)
更多評論
#
re: OGNL表達(dá)式struts2標(biāo)簽“%,#,$” 2013-03-01 16:31 |
9
1234567890
回復(fù)
更多評論
#
re: OGNL表達(dá)式struts2標(biāo)簽“%,#,$” 2013-06-19 11:27 |
asda
dasds
回復(fù)
更多評論
#
re: OGNL表達(dá)式struts2標(biāo)簽“%,#,$”[未登錄] 2014-04-14 23:29 |
等待
頂頂頂
回復(fù)
更多評論
#
re: OGNL表達(dá)式struts2標(biāo)簽“%,#,$” 2014-05-29 14:18 |
路飛
不錯(cuò),講的很詳細(xì)!
回復(fù)
更多評論
#
是[未登錄]
2014-09-04 08:51 |
dd
很好
回復(fù)
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
kettle ETL java 調(diào)用 kettle job 或 transfer
轉(zhuǎn)win8 64位+Oracle 11g 64位下使用PL/SQL Developer 的解決辦法
Java 獲取當(dāng)前日期和時(shí)間
清除目錄下的SVN信息
Linux下使用gzip壓縮與解壓文件
Linux 下ftp自動登錄
struts1.x防止重復(fù)提交
C#正則表達(dá)式小結(jié)
jbpm4 java.lang.LinkageError: loader constraint violation 包沖突
c#web定時(shí)任務(wù)
道可道非常道,名可名非常名
<
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)
給我留言
查看公開留言
查看私人留言
我參與的團(tuán)隊(duì)
JLive開發(fā)團(tuán)隊(duì)(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)
收藏夾
共享代碼
開源網(wǎng)站
ajax中國
finereport
hibernate
Java開源大全
java技術(shù)論壇
java論壇
java論壇
用戶名parable
linux伊甸園
luanyong
oracle下載
oracle資源
Struts插件
這個(gè)插件功能強(qiáng)大,包括JSF,struts,hibernate等
unix論壇
開源力量社區(qū)
源程序網(wǎng)站
資料中心
資源網(wǎng)站
parable
朋友博客
東東男
我的博客
最新隨筆
1.?kettle ETL java 調(diào)用 kettle job 或 transfer
2.?etl一個(gè)例子
3.?論壇
4.?Spring 3.2.4源碼編譯
5.?轉(zhuǎn)win8 64位+Oracle 11g 64位下使用PL/SQL Developer 的解決辦法
6.?crontab配置詳解
7.?將JSON轉(zhuǎn)換成MAP的工具類
8.? Java 獲取當(dāng)前日期和時(shí)間
9.?清除目錄下的SVN信息
10.?Symantec 卸載密碼方法
搜索
最新評論
1.?re: 攔截器底層實(shí)現(xiàn)原理
政治
--ttt
2.?re: js動態(tài)修改表格
454545
--35454
3.?re: ajax局部刷新
jkkhhhl
--34
4.?re: 將JSON轉(zhuǎn)換成MAP的工具類
v instanceof JSONArray 這段代碼有問題
需要對
List<String>做處理
--丹丹
5.?re: 將JSON轉(zhuǎn)換成MAP的工具類
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--丹丹
閱讀排行榜
1.?OGNL表達(dá)式struts2標(biāo)簽“%,#,$”(78791)
2.?linux 設(shè)置系統(tǒng)語言(44867)
3.? Java 獲取當(dāng)前日期和時(shí)間(40393)
4.?Linux下使用gzip壓縮與解壓文件(30902)
5.?將JSON轉(zhuǎn)換成MAP的工具類(22073)
評論排行榜
1.? RHEL 5 Install Number(16)
2.?ajax局部刷新(8)
3.?RHEL4-U3-i386-AS下載地址(7)
4.?將JSON轉(zhuǎn)換成MAP的工具類(7)
5.?OGNL表達(dá)式struts2標(biāo)簽“%,#,$”(6)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 無聲
主站蜘蛛池模板:
免费观看的a级毛片的网站
|
97精品免费视频
|
国产一级淫片a视频免费观看
|
亚洲天堂2017无码中文
|
日本一区二区三区免费高清
|
国产成人精品亚洲2020
|
国色精品卡一卡2卡3卡4卡免费
|
18禁止看的免费污网站
|
亚洲自偷自拍另类图片二区
|
免费黄色网址网站
|
国产亚洲综合成人91精品
|
国产一级一片免费播放
|
精品无码专区亚洲
|
亚洲精品色婷婷在线影院
|
www成人免费视频
|
国产成人亚洲综合色影视
|
1000部无遮挡拍拍拍免费视频观看
|
一本岛高清v不卡免费一三区
|
亚洲综合av一区二区三区
|
国产精品无码一区二区三区免费
|
一级女性全黄久久生活片免费
|
国产亚洲精品福利在线无卡一
|
精品无码一级毛片免费视频观看
|
国产人在线成免费视频
|
国产亚洲福利精品一区二区
|
狠狠亚洲狠狠欧洲2019
|
亚洲精品在线免费观看
|
色欲aⅴ亚洲情无码AV蜜桃
|
亚洲日韩欧洲乱码AV夜夜摸
|
69免费视频大片
|
免费亚洲视频在线观看
|
久久国产亚洲观看
|
全免费一级毛片在线播放
|
中文字幕在线观看免费
|
亚洲日本国产乱码va在线观看
|
国产又大又黑又粗免费视频
|
日本不卡免费新一区二区三区
|
亚洲精品国偷自产在线
|
成年人免费观看视频网站
|
中国精品一级毛片免费播放
|
2019亚洲午夜无码天堂
|