日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2的OGNL表达式语言

發布時間:2023/12/15 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2的OGNL表达式语言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

支持Struts2的OGNL表達式語言(2009-04-25 01:11:36)
<script></script> 標簽:struts2?ognl?it? 分類:Spring+hibernate+struts

OGNL(Object Graph Navigation Language)是一種表達式語言,使用它可以使表達式與java對象中的getter和setter屬性綁定,

且一個OGNL表達式可以進行存和取兩方面的操作.

1).使用OGNL的好處

  • 是一種 可以把GUI元素和model object綁定的語言!且通過OGNL的TypeConverter

?????????? 機制可以更容易實現值類型的的轉換!

  • 可以把Web組件和后臺的model 綁定(WebOGNL, Tapestry,WeboWork,WebOjbects)

2).OGNL表達式

OGNL使用集合

使用Collection中的元素須用索引,如:得到array中第一個元素表達式為array[0]

List

??????????? 例子:?????????? name in{null,"init"}?????? 這個例子 當name屬性是 空或"init"返回true ,

????? 而在這個過程中會創建List接口的一個實例,具體的子類沒有指定

本地Arrays???? OGNL支持創建Java本地數組!?? 且允許給定存在的list或設定數組的的大小

???????????????????????????? new int[] {1,2,3}?? 創建一個int 數組

?????????????????????????????? new int[5]?? 創建了一個int數組,它的元素的值為0

Maps??? 創建Map????? #{"foo":"fool value","bar":"bar value"}

??????? 我們甚至可以指定一個特定的java Map Class 去創建Map

??????? #@java.util.LinkedHashMap@{"foo":"foo value","bar":bar value"};

??????? Java Collection各自有一些特殊的屬性

CollectionSpecial Properties
Collection(子類有Map List Set)size???????? 集合的大小
isEmpty?? 如果集合為空值為true
Listiterator 得到此list的迭代器
Mapkeys????? 得到一個包涵所有鍵值的Set
values 得到一個包括所有值的Collection
Setiterator 得到此Set的迭代器
Iteratornext?????? 得到集合中的下一個object
hasNext如果集合中有下一個object則返回true
Enumerationnext 如上
hasNext如上
nextElement 和next一樣的作用
hasMoreElements和hasNext一樣作用

?????

?

OGNL調用JavaBean 索引屬性

JavaBean索引屬性的格式如下

???????????? public PropertyType[] getPropertyName()

???????????? public void setPropertyName(propertyType[] anArray)

??????????? public PropertyType getPropertyName(int index);

??????????? public void setPropertyName(int index,PropertyType value)

OGNL可以很容易地通過索引存取這些屬性, Example

???????? someProperty[2]

?????????在這個例子中OGNL會自動找到getSomeProperty(2)或存到setSomeProperty (2,value)中!

調用OGNL對象索引屬性

???????? 對象索引屬性格式

?????????? public PropertyType getPropertyName(IndexType index)

??????????? public void setPropertyName(IndexType index,PropertyType value)

??????????? PropertyType 和IndexType 必需跟集合和get方法中的類型相配

?

調用方法

????????????? OGNL調用方法和Java調用方法有一點區別,因為OGNL是被解釋的并且必需在運行時選擇正確的方法,所以OGNL調用方法時除了提供所需要參數沒有額外的類型信息,OGNL選擇和提供的參數最配的方法,如果有兩個或更多的方法符合匹配,它們中的一個會任意的被選擇(在WebWork中會選擇ValueStack上面的方法)

???????????? 特別一提的是 ,null可以匹配所有非基礎類型,所有它通常會導致一個不確定的方法被調用

變量的調用

????????? OGNL有一個簡單的變量配置,在這兒你可以存儲中間值和重新使用這些中間值,或者僅僅命名以使表達式更易理解! 在OGNL中所有變量都是全局的,使用變量的格式是"#variable"

????????? OGNL把當前的object在每點的表達式值存放在"this"這個變量中,而且"this"可以像其它變量一樣使用!例:

??????????????????? listeners.size().(#this>100?2*this:20+#this) 如果listeners中的元素大于100會返回元素數量的兩倍,否則數量加上20

??????????可以顯式地給變量賦值,只要在變量的后邊寫一個表達式即可

?????????????? #var -99


一.運算符
OGNL借用了java的大多數符號,而且它還加了一些新的符號,
如下表:
符號getValue()要注意事項setValue()注意事項
e1,e2
???????? 順序運算符
e1和e2都會使用同一個源對象計算值,
且會返回e2的計算值
getValue使用e1
setValue使用e2
e1=e2
????? 等于運算符
getValue使用e2,setValu使用e1,且e2的結果作為目標的對象
e1?e2:e3
e1||e2,e1 or e2
e1|e2,e1 bor e2
e1^e2, e1 xor e2
e1&e2 ,e1 band e2
e1==e2,e1 eq e2
e1!=e2, e1 neq e2
e1<e2,e1 lt e2
e1<=e2 ,e1 lte e2
e1>e2 ,e1 gt e2
e1>=e2 ,e1 get e2
e1 in e2
e1 not in e2
e1<< e2,e1 shl e2
e1>>e2 ,e1 shr e2
e1>>> e2,e1 ushr e2
e1+e2
e1-e2

e1*e2
e1/e2
e1%e2

+e
-e
!e
~e
e instanceof class
e.method(args)

e.property

e1[e2]

e1.{e2}

e1.{?e2}
???????? 選擇
e1.(e2)
?? 子表達式的計算
e1(e2)
表達式計算
constant
??????? 常量
(e)
??????? 將表達式加入括號內
method(args)
?????? 方法調用
property
?????? 屬性調用
[e]
???? 通過索引得到值
{ e,.....}
???? 創建List
#variable
???? 上下文中變量的引用
@class@method
(args)
???? 靜態方法調用
@ class@field
??? 靜態字段調用
new class(args)
構造器調用
new array-component-class[] {e,....}
數組創建
#{e1:e2,...}
???? Map創建

#@classname@{e1:e2,....}
?? 創建指定Map子類型的Map

:[e]
?? Lambda表達式

這些是最

http://blog.sina.com.cn/s/blog_5c0522dd0100cnbi.html

總結

以上是生活随笔為你收集整理的Struts2的OGNL表达式语言的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。