OGNL中OgnlContext类和Ognl类的基本使用方法

一,说明 

OGNL 单独的技术 不是由struts2的作者发明的 struts2来发扬的

OGNL表达式 什么是表达式? 具有特殊意义的一串由数字 英文和符号组成的式子

OGNL 存放东西用的 对象 变量 表达式来快速的定位到整个变量

1,先导入jar包

<!-- https://mvnrepository.com/artifact/ognl/ognl -->
<dependency>
  <groupId>ognl</groupId>
  <artifactId>ognl</artifactId>
  <version>3.1.10</version>
</dependency>

2 建一个Study类和Names类

package com.oracle.ognl;

public class Study {
    private int sid;
    private String sname;
    private Names names=new Names();

    public Names getNames() {
        return names;
    }

    public void setNames(Names names) {
        this.names = names;
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    @Override
    public String toString() {
        return "Study{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                '}';
    }
}
package com.oracle.ognl;

public class Names {
    private String one="我是糖宝";

    public String getOne() {
        return one;
    }

    public void setOne(String one) {
        this.one = one;
    }
}
package com.oracle.ognl;

public class StringPlus {
    public static  String subString(String str)
    {
        if(str.length()>10)
        {
            str=str.substring(0,10);
        }
        str+="...";
//当文字的长度大于10就隐藏以...代替 
如1234567890...
return str; }}
 
package com.oracle.ognl;

import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;
import org.junit.Test;

import java.util.List;
import java.util.Map;

public class OgnlStudy {
        @Test
    public  void study01() throws OgnlException {
            //OgnlContext:上下文对象。存在唯一的叫做根的对象(root),
            // 可以通过程序设定上下文当中的哪个对象作为根对象。
            //在OGNL中,如果表达式没有使用#号,
            // 那么OGNL会从根对象中寻找该属性对应的get方法,
            // 如果寻找不是根对象中的属性,那么则需要以#号开头,告诉OGNL,
            // 去寻找你所制定的特定对象中的属性。
            OgnlContext context=new OgnlContext();
            Study study=new Study();
            context.setRoot(study);
            context.put("text","在长期的服务过程中,我们经常会遇到前来咨询的用户与我们反馈以下这种情况:咨询者是一个前端人员,在项目开发的过程中需要与后端进行对接,遇到后端还没完成数据输出的情况下,他只好写静态模拟数据,在遇到大型项目的情况下,数据冗长、代码复杂、多样的数据类型包括IP、图片,地址,函数等,在极短的项目周期及验收时");
            context.put("study",study);
                //获取
            Object expression1 = Ognl.parseExpression("sid");
            Object expression2 = Ognl.parseExpression("sname");
            Object expression3 = Ognl.parseExpression("#study.Names.one");
            Object value = Ognl.getValue(expression3, context, context.getRoot());
                System.out.println(value);
                //调用静态方法
            Math.random();
            Object expression = Ognl.parseExpression("@java.lang.Math@random()");
            Object value1 = Ognl.getValue(expression, context, context.getRoot());
            System.out.println(value1);
         
            //调用我自己的方法
            Object expression4  = Ognl.parseExpression("@com.oracle.ognl.StringPlus@subString(#text)");
            Object text = Ognl.getValue(expression4, context,context.getRoot());
            System.out.println(text);
            //ognl表达式,支持 自动构建map和list
            Object expression5 = Ognl.parseExpression("{1,2,3,4,5}");
           List dataList = (List)Ognl.getValue(expression5, context, context.getRoot());
            System.out.println(dataList);
            Object mapExpression = Ognl.parseExpression("#{'1':'张三','2':'李四'}");
            Map datamap = (Map) Ognl.getValue(mapExpression, context, context.getRoot());
            System.out.println(datamap);
        }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值