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 ...
随机推荐
- vc 基于对话框多线程编程实例——线程之间的通信
vc基于对话框多线程编程实例——线程之间的通信 实例:
- 2013 吉林通化邀请赛 D-City 离线型的并查集
题意:给定n个点和m条边,问你拆掉前i条边后,整个图的连同城市的数量. i从1到m. 思路:计算连通的城市,很容易想到并查集,但是题目里是拆边,所以我们可以反向去做. 存下拆边的信息,从后往前建边. ...
- Android开发 - ActivityLifecycleCallbacks用法初探
ActivityLifecycleCallbacks是什么? Application通过此接口提供了一套回调方法,用于让开发人员对Activity的生命周期事件进行集中处理. 为什么用Activity ...
- malloc函数的一种简单的原理性实现
malloc()是C语言中动态存储管理的一组标准库函数之一.其作用是在内存的动态存储区中分配一个长度为size的连续空间.其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针 ...
- LeetCode——Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given ...
- Linux SSH端口转发
SSH端口转发分为两种,一种是本地端口转发,又称为本地SSH隧道.一直是远程端口转发.SSH端口转发,还必须指定数据传送的目标主机,从而形成点对点的端口转发. 本地端口转发 假定有三台主机A. ...
- Tkinter隐藏窗口再让他显示出来的例子
隐藏主要是 : withdraw()函数. 重新显示出来主要是: update()和deiconify()函数. 来源:http://www.blog.pythonlibrary.org/2012/0 ...
- ERROR: Error in Log_event::read_log_event(): 'read error', data_len: 438, event_type: 2
分析从库1062问题,解析从库binlog日志,报错如下 [root@xxxdb0402 tmp]# mysqlbinlog mysql-bin.004271 > 4.log ERROR: Er ...
- cocos2d-x ios游戏开发初认识(五) CCsprite精灵类
这次写一下精灵创建的几种类型: 一.通过文件创建: 在原有的基础上加入例如以下代码: //一.通过文件创建精灵 CCSprite *bg =CCSprite::create("map.png ...
- EBS并发管理器请求汇总(按照并发消耗时间,等待时间,平均等待事件等汇总)
此数据集用于确定正在使用中并发管理器,并可与实际的在启动时分配的并发管理器.而且考虑完成状态为 正常/警告 的请求. select q.concurrent_queue_name, count(*) ...