Ognl底层使用
今天,在得知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底层使用的更多相关文章
- Ognl表达式基本原理和使用方法
Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...
- 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】
一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...
- Struts2_ValueStack,OGNL详解(转)
原文地址:http://blog.csdn.net/wyply115/article/details/8257140 一.OGNL表达式 1.ognl是struts2中使用的一种表达式语言,可用于js ...
- Struts2的OGNL标签详解
一.Struts2可以将所有标签分成3类: UI标签:主要用于生成HTML元素的标签. 非UI标签:主要用于数据库访问,逻辑控制等标签. Ajax标签:用于Ajax支持的标签. 对于UI标签,则有可以 ...
- 关于Struts2中的值栈与OGNL表达式
1.1.1 OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL :OGNL比EL功能强大很多倍. 它是一个开源项目. ...
- struts OGNL数据标签
OGNL对象图导航语言,类似于el表达式,strut的底层就是用这个写的在导入struts-core的时候会导入ognl.jar public class Test { public static v ...
- 对struts2的OGNL的理解
OGNL:Object-Graph Navigation Language.对象图形化导航语言 OGNL是集成进struts2框架中比較强大的技术有助于传输数据和类型转换,OGNL由表达式语言和类型装 ...
- struts2(四) ognl表达式、值栈、actionContext之间的关系
今天来说说ognl表达式在struts2中的运用. --wh 一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的任 ...
- Struts2基础学习(七)—值栈和OGNL
目录: 一.值栈 二.OGNL表达式 一.值栈(ValueStack) 1.定义 ValueStack贯穿整个Acton的生命周期,每个Action类的对象实例都拥有一个ValueStack ...
随机推荐
- Socket简介 (转)
Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接字,网络上的两个程序 ...
- SSH WebShell: SSH在线WEB管理器安装教程 - VPS管理百科
SSH WebShell: SSH在线WEB管理器安装教程 - VPS管理百科 SSH WebShell: SSH在线WEB管理器安装教程 本站原创 [基于 署名-非商业使用-相同方式分享 2.5 协 ...
- Jeecg社区wiki在开放,最终能够在线看文档啦!!!
Jeecg社区wiki在开放,最终能够在线看文档啦! .! 2014-12-18 scott JEECG jeecg开源社区wiki正式启动了.方便大家看文档 訪问地址是: http://osbaba ...
- C#多线程问题整合
一.跨进程访问组件 错误:线程间操作无效: 从不是创建控件“XXX”的线程访问它 解决方法: 1:把CheckForIllegalCrossThreadCalls设置为false 这个方法只是不去捕获 ...
- 在Apache上架设SVN使得可以通过http来使用SVN
弄了一下午,终于搞定了.找到一篇好的博客.分享出来: 宇哥搞了个论坛网站,我的svn使用不了了,我把svn重新架设到apache后,又可以通过http访问svn了. .安装 Apache http:/ ...
- java 短信验证码===随机数
生成验证码,验证码生成 String mobile = phone;// 手机号码,多个号码使用","分割 // 生成随机6位码 String s = ""; ...
- .NET开发必看资料53个+经典源码77个
目录0豆下载:http://down.51cto.com/data/426019 附件预览: 基于.net构架的留言板项目大全源码 http://down.51cto.com/zt/70 ASP.ne ...
- JAVA邮件收发实现(待)
http://blog.csdn.net/ycg01/article/details/1394465
- ubuntu 12.10 软件更新源列表
ubuntu 12.10正式版已经发布了,国内各大开源软件源也陆续更新了资源.今天分享一下ubuntu 12.10 软件更新源列表. 首先,习惯性的备份一下ubuntu 12.04 原来的源地址列表文 ...
- Jetty开发指导:Jetty Websocket API
Jetty WebSocket API使用 Jetty提供了功能更强的WebSocket API,使用一个公共的核心API供WebSockets的服务端和client使用. 他是一个基于WebSock ...