JavaShuo
欄目
標籤
OGNL表達式struts2標籤「%,#,$」
時間 2019-11-17
標籤
ognl
表達式
struts2
struts
標籤
欄目
Struts
简体版
原文
原文鏈接
OGNL表達式struts2標籤「%,#,$」
1、什麼是OGNL,有什麼特色?
OGNL(Object-GraphNavigationLanguage),大概能夠理解爲:對象圖形化導航語言。是一種能夠方便地操做對象屬性的開源表達式語言。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上下文(OGNLcontext)和ActionContext;
5
、操做集合對象。
2、使用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:propertyvalue=
"#myMap['foo1']"
/>
<s:propertyvalue=
"#myMap['foo1']"
/>
2
、「%」符號的用途是在標籤的屬性值被理解爲字符串類型時,告訴執行環境%{}裏的是OGNL表達式。
這是一開始最讓我不能理解的符號,緣由是一些相關資源在表述時不太準備,通過一翻痛苦的探索,終於明白了它的用途。實際上就是讓被理解爲字符串的表達式,被真正當成ognl來執行。頗有點相似javascript裏面的eval_r()功能,例如:
varoDiv=eval_r(
"document.all.div"
+index)
varoDiv=eval_r(
"document.all.div"
+index)
當index變量爲
1
時,語句就會被看成varoDiv=document.all.div1varoDiv=document.all.div1來執行。%{}就是起這個做用。舉例:
<s:setname=
"myMap"
value=
"#{'key1':'value1','key2':'value2'}"
/>
<s:propertyvalue=
"#myMap['key1']"
/>
<s:urlvalue=
"#myMap['key1']"
/>
<s:setname=
"myMap"
value=
"#{'key1':'value1','key2':'value2'}"
/>
<s:propertyvalue=
"#myMap['key1']"
/>
<s:urlvalue=
"#myMap['key1']"
/>
上面的代碼第
2
行會在頁面上輸出「value1」,而第
3
行則會輸出
"#myMap['key1']"
這麼一個字符串。若是將第
3
行改寫成這樣:
<s:urlvalue=
"%{#myMap['key1']}"
/>
<s:urlvalue=
"%{#myMap['key1']}"
/>
則輸出爲「value1」。
這說明struts2裏不一樣的標籤對ognl的表達式的理解是不同的。若是當有的標籤「看不懂」相似「#myMap[
'key1'
]」的語句時,就要用%{}來把這括進去,「翻譯」一下了。
3
、「$」有兩種用途
(
1
)、在國際化資源文件中,引用OGNL表達式。
(
2
)、在Struts
2
配置文件中,引用OGNL表達式:
<actionname=
"saveUser"
class
=
"userAction"
method=
"save"
>
<resulttype=
"redirect"
>listUser.action?msg=${msg}</result>
</action>
<actionname=
"saveUser"
class
=
"userAction"
method=
"save"
>
<resulttype=
"redirect"
>listUser.action?msg=${msg}</result>
</action>
1、什麼是OGNL,有什麼特色?
OGNL(Object-GraphNavigationLanguage),大概能夠理解爲:對象圖形化導航語言。是一種能夠方便地操做對象屬性的開源表達式語言。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上下文(OGNLcontext)和ActionContext;
5
、操做集合對象。
2、使用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:propertyvalue=
"#myMap['foo1']"
/>
<s:propertyvalue=
"#myMap['foo1']"
/>
2
、「%」符號的用途是在標籤的屬性值被理解爲字符串類型時,告訴執行環境%{}裏的是OGNL表達式。
這是一開始最讓我不能理解的符號,緣由是一些相關資源在表述時不太準備,通過一翻痛苦的探索,終於明白了它的用途。實際上就是讓被理解爲字符串的表達式,被真正當成ognl來執行。頗有點相似javascript裏面的eval_r()功能,例如:
varoDiv=eval_r(
"document.all.div"
+index)
varoDiv=eval_r(
"document.all.div"
+index)
當index變量爲
1
時,語句就會被看成varoDiv=document.all.div1varoDiv=document.all.div1來執行。%{}就是起這個做用。舉例:
<s:setname=
"myMap"
value=
"#{'key1':'value1','key2':'value2'}"
/>
<s:propertyvalue=
"#myMap['key1']"
/>
<s:urlvalue=
"#myMap['key1']"
/>
<s:setname=
"myMap"
value=
"#{'key1':'value1','key2':'value2'}"
/>
<s:propertyvalue=
"#myMap['key1']"
/>
<s:urlvalue=
"#myMap['key1']"
/>
上面的代碼第
2
行會在頁面上輸出「value1」,而第
3
行則會輸出
"#myMap['key1']"
這麼一個字符串。若是將第
3
行改寫成這樣:
<s:urlvalue=
"%{#myMap['key1']}"
/>
<s:urlvalue=
"%{#myMap['key1']}"
/>
則輸出爲「value1」。
這說明struts2裏不一樣的標籤對ognl的表達式的理解是不同的。若是當有的標籤「看不懂」相似「#myMap[
'key1'
]」的語句時,就要用%{}來把這括進去,「翻譯」一下了。
3
、「$」有兩種用途
(
1
)、在國際化資源文件中,引用OGNL表達式。
(
2
)、在Struts
2
配置文件中,引用OGNL表達式:
<actionname=
"saveUser"
class
=
"userAction"
method=
"save"
>
<resulttype=
"redirect"
>listUser.action?msg=${msg}</result>
</action>
<actionname=
"saveUser"
class
=
"userAction"
method=
"save"
>
<resulttype=
"redirect"
>listUser.action?msg=${msg}</result>
</action>
相關文章
1.
OGNL表達式struts2標籤「%,#,$」
2.
OGNL表達式struts2標籤「%,#,$」的區別
3.
struts2 OGNL表達式
4.
struts2: OGNL表達式、OGNL表達式與struts2結合
5.
struts2的OGNL表達式
6.
Java喬曉鬆-Struts2標籤和OGNL表達式
7.
day28-struts2( struts架構分析,ognl表達式,ognl表達式)
8.
Struts2的OGNL標籤詳解
9.
Struts2標籤庫和OGNL
10.
struts2-OGNL表達式-OGNL與Struts2的結合
更多相關文章...
•
SQLite 表達式
-
SQLite教程
•
XQuery FLWOR 表達式
-
XQuery 教程
•
委託模式
•
IntelliJ IDEA代碼格式化設置
相關標籤/搜索
表達方式
lambda表達式
表達式
Lamda表達式
ognl
標籤
達標
el表達式和jstl標籤庫
表達
正則表達式
Struts
PHP 7 新特性
Hibernate教程
Spring教程
設計模式
委託模式
代碼格式化
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
網絡層協議以及Ping
2.
ping檢測
3.
爲開發者總結了Android ADB 的常用十種命令
4.
3·15 CDN維權——看懂第三方性能測試指標
5.
基於 Dawn 進行多工程管理
6.
缺陷的分類
7.
阿里P8內部絕密分享:運維真經K8S+Docker指南」,越啃越香啊,寶貝
8.
本地iis部署mvc項目,問題與總結
9.
InterService+粘性服務+音樂播放器
10.
把tomcat服務器配置爲windows服務的方法
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
OGNL表達式struts2標籤「%,#,$」
2.
OGNL表達式struts2標籤「%,#,$」的區別
3.
struts2 OGNL表達式
4.
struts2: OGNL表達式、OGNL表達式與struts2結合
5.
struts2的OGNL表達式
6.
Java喬曉鬆-Struts2標籤和OGNL表達式
7.
day28-struts2( struts架構分析,ognl表達式,ognl表達式)
8.
Struts2的OGNL標籤詳解
9.
Struts2標籤庫和OGNL
10.
struts2-OGNL表達式-OGNL與Struts2的結合
>>更多相關文章<<