摘要:簡介是的縮寫,它是一種功能強大的表達式語言,通過它簡單一致的表達式語法,可以存取對象的任意屬性,調(diào)用對象的方法,遍歷整個對象的結(jié)構(gòu)圖,實現(xiàn)字段類型轉(zhuǎn)化等功能。它使用相同的表達式去存取對象的屬性。
簡介
OGNL是Object-Graph Navigation Language的縮寫,它是一種功能強大的表達式語言,通過它簡單一致的表達式語法,可以存取對象的任意屬性,調(diào)用對象的方法,遍歷整個對象的結(jié)構(gòu)圖,實現(xiàn)字段類型轉(zhuǎn)化等功能。它使用相同的表達式去存取對象的屬性。
OGNL不僅僅可以視圖導(dǎo)航.支持比EL表達式更加豐富的功能.
導(dǎo)包
代碼準備
@Test //準備工作 public void fun1() throws Exception{ //準備Root User rootUser = new User("tom",18); //準備Context Mapcontext = new HashMap (); context.put("user1", new User("jack",18)); context.put("user2", new User("rose",22)); //準備ONGLContext OgnlContext oc = new OgnlContext(); //將rootUser作為root部分 oc.setRoot(rootUser); //將context這個Map作為Context部分 oc.setValues(context); //書寫OGNL Ognl.getValue("", oc, oc.getRoot()); }
題外:EL十一大內(nèi)置對象
requestScope、responseScope、applicationScope、pageScope、pageContext、params、paramsValues、header、headerValues、cookie、initParams
取值
//取出root中user對象的name屬性 String name = (String) Ognl.getValue("name", oc, oc.getRoot()); Integer age = (Integer) Ognl.getValue("age", oc, oc.getRoot()); //取出context中鍵為user1對象的name屬性 String name = (String) Ognl.getValue("#user1.name", oc, oc.getRoot()); String name2 = (String) Ognl.getValue("#user2.name", oc, oc.getRoot()); Integer age = (Integer) Ognl.getValue("#user2.age", oc, oc.getRoot());
為屬性賦值
//將root中的user對象的name屬性賦值 Ognl.getValue("name="jerry"", oc, oc.getRoot()); // 多個表達式可以在括號中連著寫,若有多個返回值,只會取最后一個 String name2 = (String) Ognl.getValue("#user1.name="jack",#user1.name", oc, oc.getRoot());
調(diào)用方法
//調(diào)用root中user對象的setName方法 Ognl.getValue("setName("lilei")", oc, oc.getRoot()); String name = (String) Ognl.getValue("getName()", oc, oc.getRoot()); // 多個表達式可以在括號中連著寫,若有多個返回值,只會取最后一個 String name2 = (String) Ognl.getValue("#user1.setName("lucy"),#user1.getName()", oc, oc.getRoot());
調(diào)用靜態(tài)方法
String name = (String) Ognl.getValue("@cn.zhli13.ognl.DemoUtils@echo("hello word!")", oc, oc.getRoot()); //Double pi = (Double) Ognl.getValue("@java.lang.Math@PI", oc, oc.getRoot()); //Math是ognl內(nèi)置的靜態(tài)對象,可以雙@ Double pi = (Double) Ognl.getValue("@@PI", oc, oc.getRoot());
創(chuàng)建對象(List,Map)
//創(chuàng)建list對象 Integer size = (Integer) Ognl.getValue("{"tom","jerry","jack","rose"}.size()", oc, oc.getRoot()); String name = (String) Ognl.getValue("{"tom","jerry","jack","rose"}[0]", oc, oc.getRoot()); String name2 = (String) Ognl.getValue("{"tom","jerry","jack","rose"}.get(1)", oc, oc.getRoot()); //創(chuàng)建Map對象 Integer size2 = (Integer) Ognl.getValue("#{"name":"tom","age":18}.size()", oc, oc.getRoot()); String name3 = (String) Ognl.getValue("#{"name":"tom","age":18}["name"]", oc, oc.getRoot()); Integer age = (Integer) Ognl.getValue("#{"name":"tom","age":18}.get("age")", oc, oc.getRoot());
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76503.html
摘要:也被稱作值棧對象當用戶訪問,都會創(chuàng)建一個對象,對象對象把對象放進對象之中。對象維護了對象的數(shù)據(jù)存儲著等數(shù)據(jù)也就是說通過對象可以獲取大部分我們需要的數(shù)據(jù)了。 什么是OGNL表達式? OGNL是Object Graphic Navigation Language 是操作對象屬性的開源表達式。 Struts2框架使用OGNL作為默認的表達式語言。 為什么我們學(xué)習(xí)OGNL 在學(xué)習(xí)JSP的時候,...
摘要:支持的語法用于解析靜態(tài)方法解析表達式在映射語句中可以支持引入以下幾種方式示例變量屬性靜態(tài)方法無參數(shù)待參數(shù)靜態(tài)屬性數(shù)組索引集合構(gòu)造方法的靜態(tài)方法可以省略的編寫,方法的默認是包下的靜態(tài)方法可以省略的編寫,類默認的是語法中通過兩個字符,前者 Mybatis支持OGNL的語法 OgnlCache 用于解析靜態(tài)方法org.apache.ibatis.scripting.xmltags.TextS...
摘要:現(xiàn)象項目組一妹子程序員求助,說有,有一個值明明設(shè)置的是,但是存到數(shù)據(jù)庫里面卻會自動變成,嘗試了各種調(diào)整也找不原因,都快急瘋了我以前確實沒有研究過源碼,本著專研問題的精神,決定通過對一探究竟。 現(xiàn)象 ??項目組一妹子程序員求助,說mybatis有bug,有一個值明明設(shè)置的是A.prop1=XXX,但是存到數(shù)據(jù)庫里面卻會自動變成A.prop1=true,嘗試了各種調(diào)整也找不原因,都快急瘋了...
摘要:介紹實現(xiàn)的方式用于實現(xiàn)之前之后執(zhí)行一般用于事物操作一般用于對某些未授權(quán)的頁面訪問的時候進行攔截操作攔截非法訪問開箱即用攔截器攔截器傳遞屬性攔截器測算執(zhí)行時間必須有傳遞屬性這個攔截器運行輸出日志如下可以 介紹 實現(xiàn)aop的方式用于實現(xiàn)action之前,之后執(zhí)行一般用于事物操作.一般用于對某些未授權(quán)的頁面訪問的時候,進行攔截操作,攔截非法訪問. 開箱即用攔截器 ...
閱讀 2448·2021-10-14 09:42
閱讀 1139·2021-09-22 15:09
閱讀 3545·2021-09-09 09:33
閱讀 3026·2021-09-07 09:59
閱讀 3639·2021-09-03 10:34
閱讀 3532·2021-07-26 22:01
閱讀 2822·2019-08-30 13:06
閱讀 1203·2019-08-30 10:48