OGNL的學習

OGNL是Object-Graph Navigation Language的縮寫,它是一種功能強大的表達式語言,經過它簡單一致的表達式語法,能夠存取對象的任意屬性,調用對象的方法,遍歷整個對象的結構圖,實現字段類型轉化等功能。它使用相同的表達式去存取對象的屬性。java

基本介紹:

OGNL是Object-Graph Navigation Language的縮寫,它是一種功能強大的表達式語言,經過它簡單一致的表達式語法,能夠存取對象的任意屬性,調用對象的方法,遍歷整個對象的結構圖,實現字段類型轉化等功能。它使用相同的表達式去存取對象的屬性。這樣能夠更好的取得數據。OGNL可讓咱們用很是簡單的表達式訪問對象層,例如,當前環境的根對象爲user1,則表達式person.address[0].province能夠訪問到user1的person屬性的第一個address的province屬性。這種功能是模板語言的一個重要補充,像jsp2.0,velocity,jelly等等,都有相似的功能,可是ognl比它們完善得多,並且以一個獨立的lib出現,方便咱們構建本身的框架。webwork2和如今的 Struts2.x中使用OGNL取代原來的EL來作界面數據綁定,所謂界面數據綁定,也就是把界面元素(例如一個textfield,hidden)和對象層某個類的某個屬性綁定在一塊兒,修改和顯示自動同步。
struts1.x的formbean相比,這樣作的好處很是明顯:在 webwork中不須要爲每一個頁面專門寫formbean,能夠直接利用對象層的對象。例如在對象設計中,咱們的User和Person是分開的,而一個註冊用戶界面須要填寫二者的內容,在webwork中,就能夠保持後臺的對象結構,把屬於用戶屬性的界面元素用user.person.xxx綁定,把屬於帳號屬性的界面元素用user.xxx綁定。

在struts2中

OGNL(Object-Graph Navigation Language),能夠方便地操做對象屬性的開源 表達式語言,使頁面更簡潔;
支持 運算符(如+-*/),比普通的標誌具備更高的自由度和更強的功能;
Struts 2默認的表達式語言是OGNL,緣由是它相對其它表達式語言具備下面幾大優點:
支持對象方法調用,如xxx.doSomeSpecial();
支持類靜態的方法調用和值訪問,表達式的格式爲@[類全名(包括包路徑)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;
支持賦值操做和 表達式串聯,如price=100, discount=0.8, calculatePrice(price*discount),這個表達式會返回80;
訪問OGNL上下文(OGNL context)和ActionContext;
操做集合對象。
能夠直接new一個對象

具體用法:

#」主要有三種用途:
訪問OGNL上下文和Action上下文,#至關於ActionContext.getContext();
下表有幾個ActionContext中有用的屬性: 名稱 做用 例子
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) #attr.userName至關於按順序在以上三個範圍(scope)內讀取userName屬性,直到找到爲止
用於過濾和投影(projecting)集合,如books.{?#this.price<100};
 
(來自百度百科)
相關文章
相關標籤/搜索