码迷,mamicode.com
首页 > 其他好文 > 详细

Ognl表达式

时间:2014-12-11 22:13:26      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   使用   sp   for   on   

  下边这段是百度对Ognl的定义:

  OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

  根据这段描述可以得知,Ognl表达式允许我们使用一种统一的语法来操作对象的属性、方法等。Ognl表达式比较强大的地方在于它能链式的调用方法。什么是链式的调用方法?比如一个对象A里包含另外一个对象B,如果我们有一个A的实例,但想调用B的某个方法,该怎么办?再深入N层呢?使用Ognl可以一层层深入调用方法,只需要简洁的语法就能实现。下面来看看怎么使用Ognl表达式来操作对象的属性、方法。

  先设定两个类。

class Dog{
    public string _name;
    public int _age;
    public DogKiller dk=new DogKiller();
    public Dog(string name,int age){
        this._name = name;
        this._age = age;
    }
    public void talk(string message){
        Debug.Log(string.Format("我的名字叫{0},我今年{1}岁了,我想对你说,{2}!",_name,_age,message));
    }
}

class DogKiller{
    public void Kill(string msg){
        Debug.Log(string.Format("我是狗狗杀手,我想说:{0}!!!",msg));
    }

    public static void Threat(string msg){
        Debug.Log(string.Format("你这家伙,{0}?离我远点!",msg));
    }
}

  调用类的属性。

Dog littledog = new Dog("xiaobai",5);
//获取属性
string dogname = (string)ognl.Ognl.getValue("_name",littledog);
Debug.Log(dogname);
//输出为:xiaobai

  现在创建一个上下文对象。Ognl通过上下文来存储参数数据。假如不传入上下文,Ognl会自动创建一个默认的上下文对象。

Dictionary<string,string> context = new Dictionary<string,string>();
context.Add("msg","Hello World");

  为了访问上下文中的数据,可以在前面加上#号。

//调用方法,#msg表示访问上下文中的对象
//Ognl通过上下文(context)来处理事务,如果不传入上下文,会创建一个默认的上下文对象
//上下文通常用来存储数据
ognl.Ognl.getValue("talk(#msg)",context,littledog);
//输出为:我的名字叫xiaobai,我今年5岁了,我想对你说,Hello World!

  现在我想访问Dog里面的DogKiller属性的方法Kill(),是时候使用链式调用了。

context.Add("dk","我是一个杀手!");
//链式方法调用
ognl.Ognl.getValue("dk.Kill(#dk)",context,littledog);
//输出为:我是狗狗杀手,我想说:我是一个杀手!!!!

  那么如何调用静态方法?对于静态方法,需要传入一个类名,格式为@classname@methodname。

context.Add("threat","你不想活了吗?");
//调用静态方法需提供类名,格式为"@classname@methodname(#param)"
ognl.Ognl.getValue("@DogKiller@Threat(#threat)",context,littledog);
//输出为:你这家伙,你不想活了吗??离我远点!

  Ognl还能够创建类型实例、通过下标来访问数组等集合等其它功能。不过这些功能用的不多,更多时候还是进行调用方法、访问属性等操作,因此先掌握基本的操作,假如有其它需要再详细研究。

Ognl表达式

标签:style   blog   io   ar   color   使用   sp   for   on   

原文地址:http://www.cnblogs.com/amazonove/p/4158458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!