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