OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,可以存取对象的任意属性,调用对象的方法,遍历整个对象的,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
XWork对OGNL的实现:
OGNL表达式的基本单位是"导航链",一般导航链由如下几个部分组成:
属性名称(property)
方法调用(method invoke)
数组元素
所有的OGNL表达式都基于当前对象的上下文来完成求值运算,链的前面部分的结果将作为后面求值的上下文。例如:names[0].length()。ognl表达式
例:第一个OGNL程序
public class OgnlTest {
public static String sayHello(String name) {
return "Hello," + name;
}
public static void main(String[] args) throws OgnlException {
Foo foo = new Foo();
// 1、访问基本类型
System.out.println("1、访问基本类型");
System.out.println(Ognl.getValue("name", foo));
System.out.println(Ognl.getValue("age", foo));
Ognl.setValue("age", foo, 20);
System.out.println(Ognl.getValue("age", foo));
// 2、访问数组、集合
System.out.println("2、访问数组、集合");
System.out.println(Ognl.getValue("langs[1]", foo));
System.out.println(Ognl.getValue("list[1]", foo));
// 3、访问Map
System.out.println("3、访问Map");
System.out.println(Ognl.getValue("map.age", foo));
System.out.println(Ognl.getValue("map['name']", foo));
// 4、调用方法
System.out.println("4、调用方法");
System.out.println(Ognl.getValue("name.toUpperCase()", foo));
// 5、调静态方法
System.out.println("5、调静态方法");
System.out.println(Ognl.getValue("@com.hu.otnl.OgnlTest@sayHello(name)", foo));
// 6、访问复杂的对象
Dept dept = new Dept("JiaoYanBu");
Emp e1 = new Emp("ZhangSan", 5500.0, dept);
Emp e2 = new Emp("LiSi", 6500.0, dept);
Emp e3 = new Emp("dafdang", 15000.0, dept);
dept.addEmp(e1);
dept.addEmp(e2);
dept.addEmp(e3);
System.out.println("6、访问复杂的对象");
System.out.println(Ognl.getValue("dept.deptName", e3));
System.out.println(Ognl.getValue("emps[2].empName", dept));
System.out.println(Ognl.getValue("emps[2].salary+emps[1].salary+emps[0].salary", dept));
// 7、基本运算
System.out.println("7、基本运算");
System.out.println(Ognl.getValue("age+20", foo));
System.out.println(Ognl.getValue("'hello, ' + name", foo));
// 8、创建List对象
System.out.println("8、创建List对象");
List obj = (List) Ognl.getValue("{'a','b','c'}", null);
System.out.println(obj.getClass().getName());
System.out.println(obj.get(0));
// 9、创建Map对象
System.out.println("9、创建Map");
Object obj1 = Ognl.getValue("#{'aaa':'AAA','bbb':'BBB'}", null);
System.out.println(obj1.getClass().getName());
System.out.println(obj1);
// 10、从不同的范围里取值
System.out.println("10、从不同的范围里取值");
Map<String, String> map = new HashMap<String, String>();
map.put("name", "Cafhhfg");
System.out.println(Ognl.getValue("#name", map, foo));
}
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-31886-1.html
一点养老钱也要放的踏实
帮做不断提高产品质量
不然不会说出解决男女失衡解决办法是公用妻子