Struts2——OGNL的使用(四)

简介

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。OGNL对象图导航语言,比EL表达式强大很多倍的语言,EL表达式只能从域中获取数据。OGNL可以调用对象的方法,获取struts的值栈的数据。OGNL是第三方的表达式语言,用它来获取struts中值栈的数据。支持运算符(如+-*/)支持对象方法调用,如xxx.doSomeSpecial();支持类静态的方法调用和值访问。支持赋值操作和表达式串联。访问OGNL上下文。操作集合对象。可以直接new一个对象。

使用

OGNL核心OgnlContext,本质就是一个map。两个对象分别为根对象(Root)、非根对象(Context对象)。

根对象(本质是个栈)

//写入

User user = new User(); user.setName("name");

OgnlContext ognlContext = new OgnlContext(); ognlContext.setRoot(user);

//直接读取

Object name = Ognl.getValue("name", ognlContext, ognlContext.getRoot());

System.out.println("name:" + name);

//调用方法

Object name = Ognl.getValue("'name'.length()", ognlContext, ognlContext.getRoot());

//调用静态方法

Object value = Ognl.getValue("@java.lang.Math@abs(-2)", ognlContext, ognlContext.getRoot());

写存根顶入:valueStack.getRoot().push();

弹出根顶:valueStack.getRoot().pop()

查看根顶:valueStack.getRoot().peek()

非根对象(存放一些request,session等请求)

//写入request
ActionContext.getContext().put("reqName","reqValue");
//session
ActionContext.getContext().getSession().put("sessionName","sessionValue");
//application
ActionContext.getContext().getApplication().put("ApplicationName","ApplicationValue");

在JSP里面OGNL

配置xml
<!--在jsp开启debug调试模式-->
<constant name="struts.devMode" value="true" />
<!--在jsp允许实现静态方法-->
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />

jsp:
<%--引入标签库--%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%--调用方法--%>
<s:property value="'123'.length()" />
<%--调用静态方法--%>
<s:property value="@java.lang.Math@abs(-2)" />

猜你喜欢

转载自blog.csdn.net/qq_40632760/article/details/86583637
今日推荐