Terry Zou
BlogJava
首頁
新隨筆
聯系
聚合
管理
posts - 93, comments - 2, trackbacks - 0
OGNL表達式struts2標簽“%,#,$”
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 2012-03-20 17:07
Terry Zou
閱讀(150)
評論(0)
編輯
收藏
所屬分類:
struts2.1.6
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
struts自定義標簽
設置文件默認的打開方式
OGNL表達式struts2標簽“%,#,$”
Copyright ©2025 Terry Zou Powered By:
博客園
模板提供:
滬江博客
<
2025年5月
>
日
一
二
三
四
五
六
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
7
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
Android(49)
Androidpn(2)
hibernate(1)
Https(1)
JavaCard(3)
jQuery(6)
netty
NFC(1)
react框架(1)
spring(2)
SpringBoot(1)
Tomcat+Eclipse(18)
WebService(2)
一些心得(1)
隨筆檔案
2020年4月 (4)
2015年7月 (5)
2015年6月 (6)
2015年5月 (4)
2015年4月 (3)
2015年3月 (1)
2015年2月 (1)
2015年1月 (4)
2014年12月 (1)
2014年11月 (2)
2014年10月 (2)
2014年9月 (2)
2014年5月 (5)
2014年3月 (3)
2014年2月 (2)
2014年1月 (8)
2013年12月 (2)
2013年7月 (2)
2013年6月 (4)
2013年5月 (16)
2012年7月 (1)
2012年3月 (2)
2011年7月 (6)
文章分類
struts2.1.6(3)
文章檔案
2020年4月 (1)
2012年3月 (3)
相冊
my angel
收藏夾
Java
Java
搜索
最新隨筆
1.?搭建React環境,運行React項目
2.?Spring @PostConstruct 、@Autowired和Construct 順序
3.?Spring中的ApplicationListener的使用詳解案例(觀察者模式)
4.?@SpringBootApplication的使用
5.?服務器連接
6.?ffg
7.?abe
8.?abd
9.?abc
10.?Android之Activity的四種啟動模式
最新評論
1.?re: Android JSON的簡單例子
評論內容較長,點擊標題查看
--JSON.COM
2.?re: androidpn(本文服務器為tomcat)
評論內容較長,點擊標題查看
--Deepak Singh
閱讀排行榜
1.?androidpn(本文服務器為tomcat)(5209)
2.?Web項目Spring+hibernate+Spring mvc簡單的添刪改查(4153)
3.?如何使用log4j打印日志并保存日志(3433)
4.?HttpClient連接服務器(方法有很多,我只寫HttpPost,接收數據,傳輸數據都為json形式)(3376)
5.?配置數據源(mysql)(3073)
評論排行榜
1.?Android JSON的簡單例子(1)
2.?androidpn(本文服務器為tomcat)(1)
3.?Runtime.getRuntime().addShutdownHook((0)
4.?setDaemon(0)
5.?PendingIntent(0)
主站蜘蛛池模板:
成人最新午夜免费视频
|
91热成人精品国产免费
|
免费国产成人午夜私人影视
|
亚洲熟妇AV日韩熟妇在线
|
成年午夜视频免费观看视频
|
亚洲精品天堂在线观看
|
毛片免费在线播放
|
亚洲乱码日产精品一二三
|
国产福利免费视频
|
和日本免费不卡在线v
|
亚洲中文无码av永久
|
a视频在线免费观看
|
亚洲精品成人网站在线观看
|
一本天堂ⅴ无码亚洲道久久
|
大妹子影视剧在线观看全集免费
|
3d成人免费动漫在线观看
|
自怕偷自怕亚洲精品
|
国国内清清草原免费视频99
|
亚洲啪AV永久无码精品放毛片
|
a毛看片免费观看视频
|
亚洲国产精品久久久久婷婷软件
|
最近中文字幕高清免费中文字幕mv
|
亚洲另类古典武侠
|
韩国二级毛片免费播放
|
高清免费久久午夜精品
|
亚洲va中文字幕无码久久不卡
|
亚洲国产精品成人
|
九九精品成人免费国产片
|
国产精品久久免费视频
|
一级做a爰片久久毛片免费看
|
亚洲欧洲日产国码在线观看
|
www免费黄色网
|
国产成人在线免费观看
|
aa级女人大片喷水视频免费
|
四虎在线播放免费永久视频
|
亚洲成a人片在线观看精品
|
亚洲福利视频一区二区
|
白白色免费在线视频
|
亚洲成人在线电影
|
免费观看大片毛片
|
亚洲欧美日韩一区二区三区在线
|