一,说明
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); } }