OGNL


layout: post
title: OGNL
subtitle: OGNL
date: 2018-05-31
author: ZL
header-img: img/20180531.jpg
catalog: true
tags:
- OGNL


OGNL(對(duì)象視圖導(dǎo)航語(yǔ)言)

${user.addr.name} 這種寫法就叫對(duì)象視圖導(dǎo)航.
OGNL不僅僅可以視圖導(dǎo)航.支持比EL表達(dá)式更加豐富的功能.

使用

導(dǎo)包

在struts2的包中就已經(jīng)包含了OGNL的包ognl-3.0.6.jar

準(zhǔn)備bean類User

package zl.bean;
public class User {
    private String name;
    private Integer age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public User() {
        super();
    }
    public User(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
}

取出root和context的屬性值

@Test
public void fun1() throws OgnlException{
  //準(zhǔn)備root
  User u1 = new User("qqq",18);
  
  //準(zhǔn)備context
  Map<String,User> context = new HashMap<String,User>();
  context.put("user1", new User("sss", 19));
  context.put("user2", new User("yyy", 20));
  
  //設(shè)置root和context
  OgnlContext ognl = new OgnlContext();
  ognl.setRoot(u1);
  ognl.setValues(context);
  
  //取出root中的數(shù)據(jù),直接寫屬性名
  String name = (String) Ognl.getValue("name", ognl, ognl.getRoot());
  Integer age = (Integer) Ognl.getValue("age", ognl, ognl.getRoot());
  System.out.println(name);
  System.out.println(age);
  
  //取出context中的屬性值
  //#代表從context中取值
  String user1name = (String) Ognl.getValue("#user1.name", ognl, ognl.getRoot());
  Integer user1age = (Integer) Ognl.getValue("#user1.age", ognl, ognl.getRoot());
  System.out.println(user1name+user1age);
}

修改root和context的屬性值

@Test
public void fun2() throws OgnlException{
  //準(zhǔn)備root
  User u1 = new User("qqq",18);
  
  //準(zhǔn)備context
  Map<String,User> context = new HashMap<String,User>();
  context.put("user1", new User("sss", 19));
  context.put("user2", new User("yyy", 20));
  
  //設(shè)置root和context
  OgnlContext ognl = new OgnlContext();
  ognl.setRoot(u1);
  ognl.setValues(context);
  
  //修改root的name屬性值
  Ognl.getValue("name = 'aaaa'", ognl, ognl.getRoot());
  String rootname = (String) Ognl.getValue("name", ognl, ognl.getRoot());
  System.out.println(rootname);
  
  //修改user1的name和age屬性值
  Ognl.getValue("#user1.name = 'bbbb'", ognl, ognl.getRoot());
  Ognl.getValue("#user1.age = 99", ognl, ognl.getRoot());
  String user1name = (String) Ognl.getValue("#user1.name", ognl, ognl.getRoot());
  Integer user1age = (Integer) Ognl.getValue("#user1.age", ognl, ognl.getRoot());
  System.out.println(user1name+user1age);
}

調(diào)用user的方法

@Test
public void fun3() throws OgnlException{
  //準(zhǔn)備root
  User u1 = new User("qqq",18);
  
  //準(zhǔn)備context
  Map<String,User> context = new HashMap<String,User>();
  context.put("user1", new User("sss", 19));
  context.put("user2", new User("yyy", 20));
  
  //設(shè)置root和context
  OgnlContext ognl = new OgnlContext();
  ognl.setRoot(u1);
  ognl.setValues(context);
  
  //從root中調(diào)用user對(duì)象的getName方法浪感。
  String rootname = (String) Ognl.getValue("getName()", ognl, ognl.getRoot());
  System.out.println(rootname);
  
  //從root中調(diào)用user對(duì)象的setName方法。
  Ognl.getValue("setName('jjj')", ognl, ognl.getRoot());
  String rootname2 = (String) Ognl.getValue("getName()", ognl, ognl.getRoot());
  System.out.println(rootname2);
}

調(diào)用靜態(tài)的方法和屬性

@Test
public void fun4() throws OgnlException{
  //準(zhǔn)備root
  User u1 = new User("qqq",18);
  
  //準(zhǔn)備context
  Map<String,User> context = new HashMap<String,User>();
  context.put("user1", new User("sss", 19));
  context.put("user2", new User("yyy", 20));
  
  //設(shè)置root和context
  OgnlContext ognl = new OgnlContext();
  ognl.setRoot(u1);
  ognl.setValues(context);
  
  //訪問靜態(tài)方法,屬性
  String xxx = (String) Ognl.getValue("@zl.ognl.XXX@xxx('1234567')", ognl, ognl.getRoot());
  Double pi = (Double) Ognl.getValue("@java.lang.Math@PI", ognl, ognl.getRoot());
  System.out.println(xxx);
  System.out.println(pi);
}

創(chuàng)建list對(duì)象,操作list

@Test
public void fun5() throws OgnlException{
  //準(zhǔn)備root
  User u1 = new User("qqq",18);
  
  //準(zhǔn)備context
  Map<String,User> context = new HashMap<String,User>();
  context.put("user1", new User("sss", 19));
  context.put("user2", new User("yyy", 20));
  
  //設(shè)置root和context
  OgnlContext ognl = new OgnlContext();
  ognl.setRoot(u1);
  ognl.setValues(context);
  
  //創(chuàng)建list揭斧,取出list的某個(gè)元素
  Integer size = (Integer)Ognl.getValue("{'aaa','bbb','ccc','ddd'}.size()", ognl, ognl.getRoot());
  String first = (String)Ognl.getValue("{'aaa','bbb','ccc','ddd'}[0]", ognl, ognl.getRoot());
  String second = (String)Ognl.getValue("{'aaa','bbb','ccc','ddd'}.get(1)", ognl, ognl.getRoot());
  System.out.println(size);
  System.out.println(first);
  System.out.println(second);
  
  List list = (List) Ognl.getValue("{'aaa','bbb','ccc','ddd'}", ognl, ognl.getRoot());
  System.out.println(list);
}

創(chuàng)建map對(duì)象讹开,操作map

@Test
    public void fun6() throws OgnlException{
        //準(zhǔn)備root
        User u1 = new User("qqq",18);
        
        //準(zhǔn)備context
        Map<String,User> context = new HashMap<String,User>();
        context.put("user1", new User("sss", 19));
        context.put("user2", new User("yyy", 20));
        
        //設(shè)置root和context
        OgnlContext ognl = new OgnlContext();
        ognl.setRoot(u1);
        ognl.setValues(context);
        
        //創(chuàng)建map,取出某個(gè)元素
        Integer size = (Integer)Ognl.getValue("#{'name':'bbb','age':18}.size()", ognl, ognl.getRoot());
        String name = (String)Ognl.getValue("#{'name':'bbb','age':18}['name']", ognl, ognl.getRoot());
        String name2 = (String)Ognl.getValue("#{'name':'bbb','age':18}.get('name')", ognl, ognl.getRoot());
        System.out.println(size);
        System.out.println(name);
        System.out.println(name2);
        
        Map map = (Map)Ognl.getValue("#{'name':'bbb','age':18}", ognl, ognl.getRoot());
        System.out.println(map);
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萧吠,一起剝皮案震驚了整個(gè)濱河市桐筏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梅忌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琼腔,死亡現(xiàn)場(chǎng)離奇詭異踱葛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)尸诽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門甥材,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人性含,你說我怎么就攤上這事洲赵。” “怎么了商蕴?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵叠萍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我绪商,道長(zhǎng)苛谷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任格郁,我火速辦了婚禮独悴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赫蛇。我一直安慰自己,他們只是感情好雾叭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布悟耘。 她就那樣靜靜地躺著,像睡著了一般织狐。 火紅的嫁衣襯著肌膚如雪暂幼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天移迫,我揣著相機(jī)與錄音旺嬉,去河邊找鬼。 笑死厨埋,一個(gè)胖子當(dāng)著我的面吹牛邪媳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荡陷,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼雨效,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了废赞?” 一聲冷哼從身側(cè)響起徽龟,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唉地,沒想到半個(gè)月后据悔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耘沼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年极颓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片群嗤。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讼昆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骚烧,到底是詐尸還是另有隱情浸赫,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布赃绊,位于F島的核電站既峡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏碧查。R本人自食惡果不足惜运敢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一校仑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧传惠,春花似錦迄沫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至盼砍,卻和暖如春尘吗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浇坐。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工睬捶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人近刘。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓擒贸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親觉渴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酗宋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容