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.
resiprocate 之repro使用
2.
Ubuntu配置Github並且新建倉庫push代碼,從已有倉庫clone代碼,並且push
3.
設計模式9——模板方法模式
4.
avue crud form組件的快速配置使用方法詳細講解
5.
python基礎B
6.
從零開始···將工程上傳到github
7.
Eclipse插件篇
8.
Oracle網絡服務 獨立監聽的配置
9.
php7 fmp模式
10.
第5章 Linux文件及目錄管理命令基礎
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
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的結合
>>更多相關文章<<