struts2(8)OGNL表达式

10 篇文章 0 订阅

目录

ognl简介

1.创建ognlcontext并取出对象属性。

2.ognl为属性赋值

3.ognl调用对象中的普通方法

4.ognl调用对象中的静态方法

5.ognl创建list|map对象


 

ognl简介

ognl  对象视图导航语言 Object  graphic navigation language。

${user.addr.name} 这种写法就叫做对象视图导航。 

OGNL不仅仅可以视图导航,还支持比EL表达式更加丰富的功能。

使用OGNL准备工作

导包(在struts框架中已经包含了此包不需要导入)。

EL表达式的取值对象

ognl表达式  ognlcontext  ognl上下文中包含

1.ROOT 存入任何对象都可以 

2.Context  只能存入map对象

建立一个user类

package cn.ycsj.entity;

public class User {
    private String name;
    private Integer age;
    public User(){}

    public static void echo(String aa){
        System.out.println("静态方法" + aa);

    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }



}

1.创建ognlcontext并取出对象属性。

    @Test
    @Deprecated
    //基本语法演示
    public void func1() throws OgnlException {
        //准备ognlcontext
            //准备root
        User rootuser = new User("zhangsan",15);

            //准备Context
        Map<String,User> context = new HashMap<>();
        context.put("user1",new User("tom",15));
        context.put("user2",new User("jack",10));

        OgnlContext oc = new OgnlContext();
        oc.setRoot(rootuser);
        oc.setValues(context);
        //书写OGNL
        //取出root中user对象  直接写属性名

        String name = (String) Ognl.getValue("name",oc,oc.getRoot());
        System.out.println(name);

        //取出context中的属性值 #代表中context中取出
        name = (String) Ognl.getValue("#user1.name",oc,oc.getRoot());
        System.out.println("context :name=" + name);

    }

2.ognl为属性赋值

 @Test
    @Deprecated
    //基本语法演示  为属性赋值
    public void func2() throws OgnlException {
        //准备ognlcontext
        //准备root
        User rootuser = new User("zhangsan",15);

        //准备Context
        Map<String,User> context = new HashMap<>();
        context.put("user1",new User("tom",15));
        context.put("user2",new User("jack",10));

        OgnlContext oc = new OgnlContext();
        oc.setRoot(rootuser);
        oc.setValues(context);
        //书写OGNL
        //取出root中user对象  直接写属性名  为root赋值

        Ognl.getValue("name='jerry'",oc,oc.getRoot());
        String name = (String) Ognl.getValue("name",oc,oc.getRoot());
        System.out.println(name);

        //取出context中的属性值 #代表中context中取出
        //里面的表达式能够串联Ognl.getValue("#user1.name='lalala',#user1.name='xxx'",oc,oc.getRoot());
        // 取值只能取出最后一个,赋值可以串联
        name = (String) Ognl.getValue("#user1.name='lalala'",oc,oc.getRoot());
        System.out.println("context :name=" + name);

    }

3.ognl调用对象中的普通方法

@Test
    @Deprecated
    //基本语法演示  调用对象中的普通方法。
    public void func3() throws OgnlException {
        //准备ognlcontext
        //准备root
        User rootuser = new User("zhangsan",15);

        //准备Context
        Map<String,User> context = new HashMap<>();
        context.put("user1",new User("tom",15));
        context.put("user2",new User("jack",10));

        OgnlContext oc = new OgnlContext();
        oc.setRoot(rootuser);
        oc.setValues(context);
        //书写OGNL
        //调用root中的方法

        Ognl.getValue("setName('xxx')",oc,oc.getRoot());
        String name = (String) Ognl.getValue("getName()",oc,oc.getRoot());
        System.out.println(name);

        //调用context键为user1对象的方法
        Ognl.getValue("#user1.setName('yyy')",oc,oc.getRoot());
        name = (String) Ognl.getValue("#user1.getName()",oc,oc.getRoot());
        System.out.println("context :name=" + name);

    }

4.ognl调用对象中的静态方法

  @Test
    @Deprecated
    //基本语法演示  调用对象中的静态方法。
    public void func4() throws OgnlException {
        //准备ognlcontext
        //准备root
        User rootuser = new User("zhangsan",15);

        //准备Context
        Map<String,User> context = new HashMap<>();
        context.put("user1",new User("tom",15));
        context.put("user2",new User("jack",10));

        OgnlContext oc = new OgnlContext();
        oc.setRoot(rootuser);
        oc.setValues(context);
        //书写OGNL
        //调用root中的方法

        Ognl.getValue("@cn.ycsj.entity.User@echo('aa')",oc,oc.getRoot());
        double pi = (double) Ognl.getValue("@java.lang.Math@PI",oc,oc.getRoot());
        System.out.println(pi);


        //调用context键为user1对象的方法
        Ognl.getValue("#user1.setName('yyy')",oc,oc.getRoot());
        String name = (String) Ognl.getValue("#user1.getName()",oc,oc.getRoot());
        System.out.println("context :name=" + name);

    }

5.ognl创建list|map对象

@Test
    @Deprecated
    //基本语法演示  创建对象 list| map
    public void func5() throws OgnlException {
        //准备ognlcontext
        //准备root
        User rootuser = new User("zhangsan",15);

        //准备Context
        Map<String,User> context = new HashMap<>();
        context.put("user1",new User("tom",15));
        context.put("user2",new User("jack",10));

        OgnlContext oc = new OgnlContext();
        oc.setRoot(rootuser);
        oc.setValues(context);
        //书写OGNL

        //创建一个list对象
        Integer size = (Integer) Ognl.getValue("{'tom','jerry','rose','jack'}.size",oc,oc.getRoot());

        //从list取出对象
        String  aa = (String) Ognl.getValue("{'tom','jerry','rose','jack'}[0]",oc,oc.getRoot());

        String  bb = (String) Ognl.getValue("{'tom','jerry','rose','jack'}.get(1)",oc,oc.getRoot());

        System.out.println(size);
        System.out.println(aa);
        System.out.println(bb);

        //创建map对象
        Ognl.getValue("#{'name':'jim','age':15,'addr':'beijing','sex':'male'}",oc,oc.getRoot());
        //取大小
        Integer size2 = (Integer) Ognl.getValue("#{'name':'jim','age':15,'addr':'beijing','sex':'male'}.size",oc,oc.getRoot());
        //取值
        String addr = (String) Ognl.getValue("#{'name':'jim','age':15,'addr':'beijing','sex':'male'}['addr']",oc,oc.getRoot());

        System.out.println(size2);
        System.out.println("addr :" + addr);
    }

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值