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 ...
随机推荐
- HDU1035深度搜索
/* HDU1035 意甲冠军: 给定一个字符矩阵,N S W E分别代表向上,下,剩下,进 模拟搜索,推断: 若能走出字符矩阵.则Yes,输出步数 若走不出矩阵,那么必然有圈存在,必然在矩阵中存在一 ...
- Photoshop理论:另外一种角度看图层混合模式
源地址:http://www.missyuan.com/thread-687724-1-4.html 1.我将一个色阶看成是一个由亮部和暗部组成的这么一个元素,亮部是我们看的见的,暗部是影响亮部的,有 ...
- form表单中的 action=./?> 是什么意思
./代表当前目录,?代表查询字符串为空 action="" //一般可以为空的,这里的双引号都要有的,表示提单提交给自己(也就是当前页处理)action="a.php&q ...
- Mongodb中更新的学习小结
今天继续很久没学习的mongodb的简单学习,今天来看的是更新.先来看简单的用法: use updatetest >switched to db updatetest 首先插入一下: db.th ...
- jdk1.6与1.7垃圾回收
最近项目中遇到了个关于JVM中GC线程数的问题,做一下简单的总结 问题场景: server:均为 sun公司的solaris 系统 CPU 128个 项目8.1时使用的 java版本: jdk1. ...
- android 图片水平反复平铺(repeat x)
<=用来反复显示的图 1.最简单方式 创建wave_repeat.xml <?xml version="1.0" encoding="utf-8"? ...
- Functor仿函数
转载声明:本文转自网络,稍加整理以备学习和參考之用. 函数对象/仿函数 提到C++ STL.首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭 ...
- 组队赛第二场:字符串哈希+DP
长春现场赛 HDU 4821 思路:这题周赛的时候没做出来,有点可惜了.要是当时记起来unsigned long long自己主动取模,然后提醒一下大帝的话,后续大帝就能过了. 唉,导致让他取了好多 ...
- C++技术问题总结-第11篇 网络通信中主机序网络序
网络通信常常涉及到字节序转化,接下来理解主机序和网络序有什么异同. ①主机字节顺序HBO(Host Byte Order) 採用小头序(little-endian),从低到高的顺序存储. 低位字节排放 ...
- WCF之添加自定义用户名密码认证
1.创建WCF服务应用以及调用客户端(请自行google). 2.创建X509证书 cmd 进入 C:\Program Files\Microsoft SDKs\Windows\v6. ...