Struts2的OGNL表达式语言
?
支持Struts2的OGNL表達(dá)式語言(2009-04-25 01:11:36)| <script></script> 標(biāo)簽:struts2?ognl?it? | 分類:Spring+hibernate+struts |
OGNL(Object Graph Navigation Language)是一種表達(dá)式語言,使用它可以使表達(dá)式與java對象中的getter和setter屬性綁定,
且一個OGNL表達(dá)式可以進(jìn)行存和取兩方面的操作.
1).使用OGNL的好處
- 是一種 可以把GUI元素和model object綁定的語言!且通過OGNL的TypeConverter
?????????? 機(jī)制可以更容易實(shí)現(xiàn)值類型的的轉(zhuǎn)換!
- 可以把Web組件和后臺的model 綁定(WebOGNL, Tapestry,WeboWork,WebOjbects)
2).OGNL表達(dá)式
OGNL使用集合
使用Collection中的元素須用索引,如:得到array中第一個元素表達(dá)式為array[0]
List
??????????? 例子:?????????? name in{null,"init"}?????? 這個例子 當(dāng)name屬性是 空或"init"返回true ,
????? 而在這個過程中會創(chuàng)建List接口的一個實(shí)例,具體的子類沒有指定
本地Arrays???? OGNL支持創(chuàng)建Java本地?cái)?shù)組!?? 且允許給定存在的list或設(shè)定數(shù)組的的大小
???????????????????????????? new int[] {1,2,3}?? 創(chuàng)建一個int 數(shù)組
?????????????????????????????? new int[5]?? 創(chuàng)建了一個int數(shù)組,它的元素的值為0
Maps??? 創(chuàng)建Map????? #{"foo":"fool value","bar":"bar value"}
??????? 我們甚至可以指定一個特定的java Map Class 去創(chuàng)建Map
??????? #@java.util.LinkedHashMap@{"foo":"foo value","bar":bar value"};
??????? Java Collection各自有一些特殊的屬性
| Collection | Special Properties |
| Collection(子類有Map List Set) | size???????? 集合的大小 isEmpty?? 如果集合為空值為true |
| List | iterator 得到此list的迭代器 |
| Map | keys????? 得到一個包涵所有鍵值的Set values 得到一個包括所有值的Collection |
| Set | iterator 得到此Set的迭代器 |
| Iterator | next?????? 得到集合中的下一個object hasNext如果集合中有下一個object則返回true |
| Enumeration | next 如上 hasNext如上 nextElement 和next一樣的作用 hasMoreElements和hasNext一樣作用 |
?????
?
OGNL調(diào)用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)中!
調(diào)用OGNL對象索引屬性
???????? 對象索引屬性格式
?????????? public PropertyType getPropertyName(IndexType index)
??????????? public void setPropertyName(IndexType index,PropertyType value)
??????????? PropertyType 和IndexType 必需跟集合和get方法中的類型相配
?
調(diào)用方法
????????????? OGNL調(diào)用方法和Java調(diào)用方法有一點(diǎn)區(qū)別,因?yàn)镺GNL是被解釋的并且必需在運(yùn)行時選擇正確的方法,所以O(shè)GNL調(diào)用方法時除了提供所需要參數(shù)沒有額外的類型信息,OGNL選擇和提供的參數(shù)最配的方法,如果有兩個或更多的方法符合匹配,它們中的一個會任意的被選擇(在WebWork中會選擇ValueStack上面的方法)
???????????? 特別一提的是 ,null可以匹配所有非基礎(chǔ)類型,所有它通常會導(dǎo)致一個不確定的方法被調(diào)用
變量的調(diào)用
????????? OGNL有一個簡單的變量配置,在這兒你可以存儲中間值和重新使用這些中間值,或者僅僅命名以使表達(dá)式更易理解! 在OGNL中所有變量都是全局的,使用變量的格式是"#variable"
????????? OGNL把當(dāng)前的object在每點(diǎn)的表達(dá)式值存放在"this"這個變量中,而且"this"可以像其它變量一樣使用!例:
??????????????????? listeners.size().(#this>100?2*this:20+#this) 如果listeners中的元素大于100會返回元素?cái)?shù)量的兩倍,否則數(shù)量加上20
??????????可以顯式地給變量賦值,只要在變量的后邊寫一個表達(dá)式即可
?????????????? #var -99
| 一.運(yùn)算符 | ||||||||||||||||||||||||||||||||||||||||||||||||
| OGNL借用了java的大多數(shù)符號,而且它還加了一些新的符號, 如下表:
|
http://blog.sina.com.cn/s/blog_5c0522dd0100cnbi.html
總結(jié)
以上是生活随笔為你收集整理的Struts2的OGNL表达式语言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库 string (varchar)
- 下一篇: 文学-人物:司马迁