今天,在得知ognl采用。在这里和大家分享一下。我希望能帮助。

package com.hcj.test;

import java.util.ArrayList;
import java.util.List; import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException; public class Test {
public static void main(String[] args) throws OgnlException {
Person p = new Person();
p.setName("张三"); Cat cat = new Cat();
cat.setName("花猫"); //创建ognl上下文
OgnlContext ognlContext = new OgnlContext();
ognlContext.put("person", p);
ognlContext.put("cat", cat);
//设置person根对象
ognlContext.setRoot(p);
//获取根对象
Object root = ognlContext.getRoot(); //获取根对象的属性
Object obj1 = Ognl.parseExpression("name");
System.out.println(obj1);
Object value1 = Ognl.getValue(obj1, ognlContext, root);
System.out.println(value1);
System.out.println("=========="); //訪问非根对象的属性
Object obj2 = Ognl.parseExpression("#cat.name");
System.out.println(obj2);
Object value2 = Ognl.getValue(obj2, ognlContext, root);
System.out.println(value2);
System.out.println("=========="); //訪问类的静态方法
Object obj3 = Ognl.parseExpression("@java.lang.Math@PI");
System.out.println(obj3);
Object value3 = Ognl.getValue(obj3, ognlContext, root);
System.out.println(value3);
System.out.println("======"); //訪问math方法
Object obj4 = Ognl.parseExpression("@@max(1,3)");
System.out.println(obj4);
Object value4 = Ognl.getValue(obj4, ognlContext, root);
System.out.println(value4);
System.out.println("======"); //创建对象
Object obj5 = Ognl.parseExpression("new com.hcj.test.Cat()");
System.out.println(obj5);
Object value5 = Ognl.getValue(obj5, ognlContext, root);
System.out.println(value5);
System.out.println("======"); //创建list对象
Object obj6 = Ognl.parseExpression("{'a','b','c'}");
System.out.println(obj6);
Object value6 = Ognl.getValue(obj6, ognlContext, root);
System.out.println(value6);
System.out.println("======"); //訪问list对象属性
Object obj7 = Ognl.parseExpression("{'a','b','c'}[1]");
System.out.println(obj7);
Object value7 = Ognl.getValue(obj7, ognlContext, root);
System.out.println(value7);
System.out.println("======"); //创建map对象
Object obj8 = Ognl.parseExpression("#{'1':'aa', '2':'bb', '3':'cc'}");
System.out.println(obj8);
Object value8 = Ognl.getValue(obj8, ognlContext, root);
System.out.println(value8);
System.out.println("======"); //訪问map对象属性
Object obj9 = Ognl.parseExpression("#{'1':'aa', '2':'bb', '3':'cc'}['3']");
System.out.println(obj9);
Object value9 = Ognl.getValue(obj9, ognlContext, root);
System.out.println(value9);
System.out.println("======"); //选择,格式: collection.{? expression}
List<Person> persons = new ArrayList<Person>();
Person p1 = new Person();
p1.setName("zz12345");
Person p2 = new Person();
p2.setName("aa121312");
Person p3 = new Person();
p3.setName("bb"); persons.add(p1);
persons.add(p2);
persons.add(p3);
//将persons放入ognl上下文中
ognlContext.put("persons", persons); Object obj10 = Ognl.parseExpression("#persons.{? #this.name.length() > 2}");
System.out.println(obj10);
Object value10 = Ognl.getValue(obj10, ognlContext, root);
System.out.println(value10);
System.out.println("======"); //投影,格式: collection.{? expression}
Object obj11 = Ognl.parseExpression("#persons.{#this.name}");
System.out.println(obj11);
Object value11 = Ognl.getValue(obj11, ognlContext, root);
System.out.println(value11);
System.out.println("======"); }
}

输出结果:

name
张三
==========
#cat.name
花猫
==========
@java.lang.Math@PI
3.141592653589793
======
@java.lang.Math@max(1, 3)
3
======
new com.hcj.test.Cat()
com.hcj.test.Cat@1dff3a2
======
{ 'a', 'b', 'c' }
[a, b, c]
======
{ 'a', 'b', 'c' }[1]
b
======
#{ '1' : "aa", '2' : "bb", '3' : "cc" }
{1=aa, 2=bb, 3=cc}
======
#{ '1' : "aa", '2' : "bb", '3' : "cc" }['3']
cc
======
#persons.{? (#this.name.length() > 2) }
[com.hcj.test.Person@b988a6, com.hcj.test.Person@ba6c83]
======
#persons.{ #this.name }
[zz12345, aa121312, bb]
======

版权声明:本文博主原创文章,博客,未经同意不得转载。

Ognl底层使用的更多相关文章

  1. Ognl表达式基本原理和使用方法

    Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...

  2. 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】

    一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...

  3. Struts2_ValueStack,OGNL详解(转)

    原文地址:http://blog.csdn.net/wyply115/article/details/8257140 一.OGNL表达式 1.ognl是struts2中使用的一种表达式语言,可用于js ...

  4. Struts2的OGNL标签详解

    一.Struts2可以将所有标签分成3类: UI标签:主要用于生成HTML元素的标签. 非UI标签:主要用于数据库访问,逻辑控制等标签. Ajax标签:用于Ajax支持的标签. 对于UI标签,则有可以 ...

  5. 关于Struts2中的值栈与OGNL表达式

    1.1.1    OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL     :OGNL比EL功能强大很多倍. 它是一个开源项目. ...

  6. struts OGNL数据标签

    OGNL对象图导航语言,类似于el表达式,strut的底层就是用这个写的在导入struts-core的时候会导入ognl.jar public class Test { public static v ...

  7. 对struts2的OGNL的理解

    OGNL:Object-Graph Navigation Language.对象图形化导航语言 OGNL是集成进struts2框架中比較强大的技术有助于传输数据和类型转换,OGNL由表达式语言和类型装 ...

  8. struts2(四) ognl表达式、值栈、actionContext之间的关系

    今天来说说ognl表达式在struts2中的运用. --wh 一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的任 ...

  9. Struts2基础学习(七)—值栈和OGNL

    目录: 一.值栈 二.OGNL表达式 一.值栈(ValueStack) 1.定义      ValueStack贯穿整个Acton的生命周期,每个Action类的对象实例都拥有一个ValueStack ...

随机推荐

  1. 2015年十大热门Android开源新项目

    2015年十大热门Android开源新项目 2015 即将结束,又到了大家喜闻乐见的年终盘点时刻啦,今天给大家盘点一下 2015 年 Android 开发领域新出现的 10 大热门开源项目.数据来自于 ...

  2. 使用Swing实现简易而不简单的文档编辑器

    本文通过Swing来实现文档简易而不简单的文档编辑器,该文档编辑器的功能包括: 设置字体样式:粗体,斜体,下划线,可扩展 设置字体:宋体,黑体,可扩展 设置字号:12,14,18,20,30,40, ...

  3. 在后台运行erlang;在需要时连回交互模式

    * 1. 启动后台运行的erlang环境 按以下命令: erl -detached -name a@127.0.0.1 注意,-name的值必须是xxxx@ip的形式.其中xxxx是英文名,ip必须是 ...

  4. wpf dll和exe合并成一个新的exe

    原文:wpf dll和exe合并成一个新的exe 微软有一个工具叫ILMerge可以合并dll exe等,但是对于wpf的应用程序而言这个工具就不好用了.我的这方法也是从国外一个博客上找来的.仅供大家 ...

  5. libevent安装总结 - jinfg2008的专栏 - 博客频道 - CSDN.NET

    libevent安装总结 - jinfg2008的专栏 - 博客频道 - CSDN.NET libevent安装总结 分类: linux 系统配置 2013-02-13 22:37 99人阅读 评论( ...

  6. TypeError: Cannot read property &#39;style&#39; of null 错误解决

    错误信息例如以下: JSP代码例如以下: <c:if test ="${not empty excelErrors}"> <div id="excelE ...

  7. 读 Working with forms 一些心得

    Working with forms About this document This document provides an introduction to Django’s form handl ...

  8. hdu4126(最小生成树+dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4126 题意:给出一幅3000个点的图,有10000次操作: 求将某条边的权值变大后的最小生成树,最后输 ...

  9. 风起看云涌,叶落品人生 - Google 搜索

    风起看云涌,叶落品人生 - Google 搜索 风起看云涌,叶落品人生

  10. AE+SceneControl源代码共享

    近来的,博友发私信或邮件交换,第一次使用前SceneControl代做一点project股票,做的很粗糙.我们希望对大家有帮助,欢迎留言交流哈萨克斯坦. 除了主开.保存.数据加载.询价,几个功能主要是 ...