今天,在得知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. 多项式相乘(C语言)

    //两个多项式的系数f分别存在x[]和y[]中,下标即为次数,*Max表示本多项式最高次数 int MX_double( double x[], int xMax, double y[], int y ...

  2. WCF(1)----服务创建

    本例中,我们通过一个关于Camera的服务为例子来说明WCF的开发流程,该服务比较简单,只是用来实现对Camera的添加,枚举,删除等操作. 详细步骤如下: 1:创建一个WCF Service Lib ...

  3. Rudiments 0.42 发布,C++ 常用工具包 - 开源中国社区

    Rudiments 0.42 发布,C++ 常用工具包 - 开源中国社区 Rudiments 0.42 发布,C++ 常用工具包

  4. POJ 1724 ROADS(bfs最短路)

    n个点m条边的有向图,每条边有距离跟花费两个参数,求1->n花费在K以内的最短路. 直接优先队列bfs暴力搞就行了,100*10000个状态而已.节点扩充的时候,dp[i][j]表示到达第i点花 ...

  5. LIS(最长的序列)和LCS(最长公共子)总结

    LIS(最长递增子序列)和LCS(最长公共子序列)的总结 最长公共子序列(LCS):O(n^2) 两个for循环让两个字符串按位的匹配:i in range(1, len1) j in range(1 ...

  6. VSTO学习笔记(十四)Excel数据透视表与PowerPivot

    原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...

  7. 俄罗斯方块游戏JavaScript代码

    JavaScript代码俄罗斯方块游戏 早就听说网上有人仅仅用60行JavaScript代码写出了一个俄罗斯方块游戏,最近看了看,今天在这篇文章里面我把我做的分析整理一下(主要是以注释的形式). 我用 ...

  8. hdu1114(完全背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 分析:很裸的一道完全背包题,只是这里求装满背包后使得价值最少,只需初始化数组dp为inf:dp[ ...

  9. Android 通过调用系统,如接口 谷歌语音、百度语音、科大讯飞语音等语音识别方法对话框

    现在app在发展过程中会集成一些语音识别功能,不具有其自己的显影剂一般正在开发的语音识别引擎,所以在大多数情况下,它是选择一个成熟的语音识别引擎SDK集成到他们的app在. 平时,这种整合被分成两个, ...

  10. Leetcode 细节实现 Set Matrix Zeroes

    Set Matrix Zeroes Total Accepted: 18139 Total Submissions: 58671My Submissions Given a m x n matrix, ...