struts2的OGNL表达式

ognl表达式:
OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个开源项目。Struts框架使用OGNL作为默认的表达式语言,必须配置Struts标签用,不能离开Struts标签直接使用,就是说Ognl必须在Struts中使用。
当Struts2接受一个请求时,会迅速创建ActionContext,然后创建ValueStack,再创建action。接着把action存放到ValueStack中,所以action中的实例变量可以被OGNL表达式直接访问。

使用方式:
1.引入<%@taglib prefix="s" uri="/struts-tags" %>
2.使用 <s:property value="user.name"/>标签获取取值,取值的时候要注意根元素(全局变量)不用#号,其他的都用#号

OGNL中重要的3个符号:#、%、$:
1.#符号:
1.#能取request、session、application里的attribute,但需要加前缀。如:<s:property value="#session.name2"/>如果是取request范围的attribute,那么不需要加request前缀,加上反而取不到数据,ognl默认从request里取,如果没有取到并不会到session或application里取。如:
2.#能取request里的请求参数,但必须加parameters前缀,且取到的是一个数组,所以如果你要得到参数的第一项值,那么还要加下标。如:。这相当于调用request.getParameterValues(“name”)[0];
3.#加attr前缀能按request > session > application顺序获取attribute,这样当在request中取不到时,会自动向session里取,如果session里也取不到,会再向application里取。如果取到则返回,不再向上游历。如:<s:property value="#attr.name"/>
2. %运算符:
%{}的用途是在标签的属性为字符串类型时,计算OGNL表达式的值。
3.$运算符:
用于在国际化资源文件中,引用OGNL表达式。例如在资源文件中有一个标签fileName,则可以在资源文件中引用:validation.require=${getText(fileName)} is required
在struts2配置文件中引用OGNL表达式,如:

<action name="***" class="***">
<result type="redirect">ListPhotos.action?albumId=${albumId}</result>
</action>

ognl具体使用方法:
1.访问属性
名字属性获取:<s:property value="user.username"/><br>
地址属性获取:<s:property value="user.address.addr"/><br>
2.访问方法
调用值栈中对象的普通方法:<s:property value="user.get()"/><br>

猜你喜欢

转载自blog.csdn.net/qq_38682952/article/details/78346766