標籤:知識 size xxxxx 國際 obj attr his 索引值 總結
OGNL
是在對象圖中找到對象和方法屬性的語言 是一個獨立的功能項目
OGNL是Object-Graph Navigation Language的縮寫,它是一種功能強大的運算式語言,通過它簡單一致的運算式文法,可以存取對象的任意屬性,調用對象的方法,遍曆整個對象的結構圖,實現欄位類型轉化等功能。它使用相同的運算式去存取對象的屬性。
ognl 運算式的表單標籤 name 屬性是ognl 運算式
非表單標籤所有value 屬性是 ognl 運算式
OGNL是通常要結合Struts 2的標誌一起使用。主要是#、%和$這三個符號的使用
------------
#”主要有三種用途:
訪問OGNL上下文和Action上下文,
#相當於ActionContext.getContext();
下表有幾個Acti onContext中有用的屬性: 名稱 作用 例子
parameters 包含當前HTTP請求參數的Map #parameters.id[0]作用相當於request.getParameterValues("id").get(0);
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)
1.#用於從ognl 的map 集合取值指定根(key)
2.#attr.userName相當於按順序在以上三個範圍(scope)內讀取userName屬性,直到找到為止 用於過濾和投影(projecting)集合,如books.{?#this.price<100};
3.構造Map,如#{‘foo1‘:‘bar1‘, ‘foo2‘:‘bar2‘}。
--------------
“%”符號的用途是在標誌的屬性為字串類型時,計算OGNL運算式的值。
-------------
“$”有兩個主要的用途,用於在國際化資源檔中,引用OGNL運算式。在Struts 2和i18n中設定檔
運算式的使用:
------------
1. 基本對象樹的訪問
對象樹的訪問就是通過使用點號將對象的引用串聯起來進行。
例如:xxxx,xxxx.xxxx,xxxx. xxxx. xxxx. xxxx. xxxx
2. 對容器變數的訪問
對容器變數的訪問,通過#符號加上運算式進行。
例如:#xxxx,#xxxx.xxxx,#xxxx.xxxxx.xxxx.xxxx.xxxx
3. 使用操作符號
OGNL運算式中能使用的操作符基本跟Java裡的操作符一樣,除了能使用 +, -, *, /, ++, --, ==, !=, = 等操作符之外,還能使用 mod, in, not in等。
4. 容器、數組、對象
OGNL支援對數組和ArrayList等容器的順序訪問:例如:group.users[0]
同時,OGNL支援對Map的按索引值尋找:
例如:#session[‘mySessionPropKey‘]
不僅如此,OGNL還支援容器的構造的運算式:
例如:{"green", "red", "blue"}構造一個List,#{"key1" : "value1", "key2" : "value2", "key3" : "value3"}構造一個Map
你也可以通過任意類對象的建構函式進行對象建立:
5.對靜態方法或變數的訪問
要引用類的靜態方法和欄位,他們的表達方式是一樣的@[email protected]或者@[email protected](args):
例如:@[email protected],@[email protected]
6. 方法調用
直接通過類似Java的方法調用方式進行,你甚至可以傳遞參數:
例如:user.getName(),group.users.size(),group.containsUser(#requestUser)
7. 投影和選擇
OGNL支援類似資料庫中的投影(projection) 和選擇(selection)。
投影就是選出集合中每個元素的相同屬性群組成新的集合,類似於關聯式資料庫的欄位操作。投影操作文法為 collection.{XXX},其中XXX 是這個集合中每個元素的公用屬性。
例如:group.userList.{username}將獲得某個group中的所有user的name的列表。
-----------------
選擇就是過濾滿足selection 條件的集合元素,類似於關聯式資料庫的紀錄操作。選擇操作的文法為:collection.{X YYY},其中X 是一個選擇操作符,後面則是選擇用的邏輯運算式。而選擇操作符有三種:
? 選擇滿足條件的所有元素
^ 選擇滿足條件的第一個元素
$ 選擇滿足條件的最後一個元素
例如:group.userList.{? #txxx.xxx != null}將獲得某個group中user的name不為空白的user的列表。
Java知識總結-9