博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OGNL表达式入门
阅读量:6962 次
发布时间:2019-06-27

本文共 5149 字,大约阅读时间需要 17 分钟。

package com.scorpion.ognl;import java.util.ArrayList;import java.util.List;import ognl.Ognl;import ognl.OgnlContext;import ognl.OgnlException;public class OgnlTest{    /**     *      * Ognl实现了map接口     *      * @param args     * @throws OgnlException     */    public static void main(String[] args) throws OgnlException    {        Person person = new Person();        person.setUsername("yujun");        Dog dog = new Dog();        dog.setUsername("laifu");        /**         * 生成ognl上下文对象         */        OgnlContext context = new OgnlContext();        /**         * put方法是将对象放置到上下文,以便ognl进行读取解析         *          */        context.put("person", person);        context.put("dog", dog);        /**         * 设置根元素对象,假如直接读取属性,那么将从根元素寻找此属性值,比如person对象的username属性,         * 当我们将person设置为根元素后,那么parseExpression方法将从person里面寻找username         */        context.setRoot(person);        Object obj1 = Ognl.parseExpression("username");        System.out.println(obj1);        Object obj2 = Ognl.getValue(obj1, context, context.getRoot());        System.out.println(obj2);        Object obj3 = Ognl.parseExpression("#person.username");        System.out.println(obj3);        Object obj4 = Ognl.getValue(obj3, context, context.getRoot());        System.out.println(obj4);        Object obj5 = Ognl.parseExpression("#dog.username");        System.out.println(obj5);        Object obj6 = Ognl.getValue(obj5, context, context.getRoot());        System.out.println(obj6);        /**         * 获取username属性值的时候,相当于是隐式调用了对应的getUsername()方法         * 可以再去调用这个获得的字符串的相应的方法,比如说toUpperCase,还可以再调用length         *          */        Object obj7 = Ognl.parseExpression("username.toUpperCase().length()");        System.out.println(obj7);        Object obj8 = Ognl.getValue(obj7, context, context.getRoot());        System.out.println(obj8);        /**         * 调用静态方法不需要生成对象,格式为\@package.className@methodName(parameters)\         * 当调用的类是java         * .lang.Math时,可以省略package.className,形式为@@methodName(parameter)         */        Object obj9 = Ognl                .parseExpression("@java.lang.Integer@toBinaryString(10)");        System.out.println(obj9);        Object obj10 = Ognl.getValue(obj9, context, context.getRoot());        System.out.println(obj10);        /**         * 生成一个集合对象的使用方法,用花括号,里面用逗号,要访问某个值,只需要用下标访问即可 对于Ognl来说,集合与数组是一样的         *          */        Object obj11 = Ognl.getValue("{'aa','ab','ac'}[2]", context,                context.getRoot());        System.out.println(obj11);        dog.setFriends(new String[]        { "aa", "bb", "cc" });        Object obj12 = Ognl.getValue("#dog.friends[1]", context,                context.getRoot());        System.out.println(obj12);        List
list = new ArrayList
(); list.add("aaaaa"); list.add("bbb"); list.add("ccc"); context.put("list", list); Object obj13 = Ognl.getValue("#list[1]", context, context.getRoot()); System.out.println(obj13); /** * Ognl处理映射(map)的语法格式 #{'key1':'value1','key2':'value2'}; * * 如果要获得某个value,传递对应的key即可 */ Object obj14 = Ognl.getValue("#{'key1':'value1','key2':'value2'}['key2']", context, context.getRoot()); System.out.println(obj14); /** * 过滤(filter)的表达式 * * collection.{? expression} * */ List
persons = new ArrayList
(); Person p1 = new Person(); Person p2 = new Person(); Person p3 = new Person(); p1.setUsername("zhangsikkkk"); p2.setUsername("liwu"); p3.setUsername("zhaoliu"); persons.add(p1); persons.add(p2); persons.add(p3); context.put("persons", persons); /** * 过滤操作,返回name值大于4的 #this代表persons对象,操作结果返回的是一个集合collection * "#persons.{? #this.username.length() > 4}.isEmpty()" * 返回的集合就可以调用集合的方法了,比如size(),比如isEmpty() * * 获取集合中的第一个元素 #persons.{? #this.username.length() > * 4}[0].username,可以返回第一个元素的username属性 获取集合中的第一个元素(返回的是一个集合) #persons.{^ * #this.username.length() > 4},此表达式返回[perosn@hashcode] * * 返回符合条件的最后一个元素(返回的是一个元素) #persons.{$ #this.username.length() > * 4},此表达式返回perosn@hashcode * * */ Object obj15 = Ognl.getValue("#persons.{? #this.username.length() > 4}.size()", context, context.getRoot()); System.out.println(obj15); /** * 投影(projection)表达式 collection.{expression} 过滤是取行,投影是取列 * #persons.{username} 返回三个名字的集合 * 下面这个表达式将名字长度小于5的替换成hello world * #persons.{#this.username.length() <= 5 ? 'hello world' : #this.name} */ Object obj16 = Ognl.getValue("#persons.{username}.size()", context, context.getRoot()); System.out.println(obj16); Object obj17 = Ognl.getValue("#persons.{#this.username.length() <= 5 ? 'hello world' : #this.username}", context, context.getRoot()); System.out.println(obj17); }}

 

转载于:https://www.cnblogs.com/withscorpion/p/5608585.html

你可能感兴趣的文章
Linux中Tomcat的安装与配置
查看>>
Linux—CentOS7.4-DNS一(搭建DNS服务器)
查看>>
CentOS7.4——LVS负载均衡群集—直接路由模式(LVS-DR)
查看>>
lr迭代
查看>>
Java中对象序列化与反序列化
查看>>
Confluence-企业知识管理与协同软件安装步骤
查看>>
[翻译]Cocos2d-x 2.1.4的配置
查看>>
lstrlenW不是ATL的成员解决方法 (VS2008)
查看>>
Linux环境ffmpeg以及相应解码器安装
查看>>
Spark: Custom UDF Example
查看>>
有关/etc/passwd,/etc/shadow,/etc/group,以及用户管理与查看用户信息的命令知识总结...
查看>>
C#特性
查看>>
使用window.open切换到之前打开过的新页面
查看>>
【入门】使用游标做更新时的注意事项
查看>>
IP核
查看>>
解决字符替换时大小写的敏感问题
查看>>
linux 磁盘管理上(分区操作,格式化文件,挂载和卸载)
查看>>
我的友情链接
查看>>
以太网为什么要有最小帧长?
查看>>
IBM服务器BMC 远程管理
查看>>