摘要:簡介是的縮寫,它是一種功能強大的表達式語言,通過它簡單一致的表達式語法,可以存取對象的任意屬性,調用對象的方法,遍歷整個對象的結構圖,實現字段類型轉化等功能。它使用相同的表達式去存取對象的屬性。
簡介
OGNL是Object-Graph Navigation Language的縮寫,它是一種功能強大的表達式語言,通過它簡單一致的表達式語法,可以存取對象的任意屬性,調用對象的方法,遍歷整個對象的結構圖,實現字段類型轉化等功能。它使用相同的表達式去存取對象的屬性。
OGNL不僅僅可以視圖導航.支持比EL表達式更加豐富的功能.
導包
代碼準備
@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十一大內置對象
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());
調用方法
//調用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());
調用靜態方法
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內置的靜態對象,可以雙@ Double pi = (Double) Ognl.getValue("@@PI", oc, oc.getRoot());
創建對象(List,Map)
//創建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()); //創建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());
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76503.html
摘要:也被稱作值棧對象當用戶訪問,都會創建一個對象,對象對象把對象放進對象之中。對象維護了對象的數據存儲著等數據也就是說通過對象可以獲取大部分我們需要的數據了。 什么是OGNL表達式? OGNL是Object Graphic Navigation Language 是操作對象屬性的開源表達式。 Struts2框架使用OGNL作為默認的表達式語言。 為什么我們學習OGNL 在學習JSP的時候,...
摘要:支持的語法用于解析靜態方法解析表達式在映射語句中可以支持引入以下幾種方式示例變量屬性靜態方法無參數待參數靜態屬性數組索引集合構造方法的靜態方法可以省略的編寫,方法的默認是包下的靜態方法可以省略的編寫,類默認的是語法中通過兩個字符,前者 Mybatis支持OGNL的語法 OgnlCache 用于解析靜態方法org.apache.ibatis.scripting.xmltags.TextS...
摘要:現象項目組一妹子程序員求助,說有,有一個值明明設置的是,但是存到數據庫里面卻會自動變成,嘗試了各種調整也找不原因,都快急瘋了我以前確實沒有研究過源碼,本著專研問題的精神,決定通過對一探究竟。 現象 ??項目組一妹子程序員求助,說mybatis有bug,有一個值明明設置的是A.prop1=XXX,但是存到數據庫里面卻會自動變成A.prop1=true,嘗試了各種調整也找不原因,都快急瘋了...
摘要:介紹實現的方式用于實現之前之后執行一般用于事物操作一般用于對某些未授權的頁面訪問的時候進行攔截操作攔截非法訪問開箱即用攔截器攔截器傳遞屬性攔截器測算執行時間必須有傳遞屬性這個攔截器運行輸出日志如下可以 介紹 實現aop的方式用于實現action之前,之后執行一般用于事物操作.一般用于對某些未授權的頁面訪問的時候,進行攔截操作,攔截非法訪問. 開箱即用攔截器 ...
閱讀 2506·2021-10-14 09:42
閱讀 1148·2021-09-22 15:09
閱讀 3552·2021-09-09 09:33
閱讀 3035·2021-09-07 09:59
閱讀 3648·2021-09-03 10:34
閱讀 3547·2021-07-26 22:01
閱讀 2829·2019-08-30 13:06
閱讀 1214·2019-08-30 10:48