一、OGNL简介
OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,是struts2整合的一个开源项目, 并且Struts2框架使用OGNL作为默认的表达式语言。在struts2中,要想使用OGNL表达式,必须导入Struts2标签库。
OGNL与之前介绍的 JSP中的EL表达式 功能类似,主要用于从作用域取数据。
关于JSP中的EL表达式,参考我的博客 Java Web之JSP中的EL表达式
二、OGNL的简单使用
s:property类型于JSP的表达式,把value的值直接输出到页面
jsp表达式:【<jsp:setProperty property="" name=""/>】
value属性的值就是一个OGNL表达式
如果想把value属性的值当字符串输出,加单引号即可
<%--
Created by IntelliJ IDEA.
User: hestyle
Date: 2019/10/26
Time: 11:19 上午
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 使用OGNL表达式必须导入struts标签库 --%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>OGNL表达式</title>
</head>
<body>
<%-- value属性表示需要取出的变量对应的名称 --%>
<s:property value="OGNL"/><br>
<%-- value属性中含有单引号,表示直接输出字符串"GNL表达式" --%>
<s:property value="'OGNL表达式'"/>
</body>
</html>
浏览器访问index.jsp页面
三、OGNL的功能
①、访问对象方法
②、访问静态属性
③、访问静态方法
<%--
Created by IntelliJ IDEA.
User: hestyle
Date: 2019/10/26
Time: 11:19 上午
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 使用OGNL表达式必须导入struts标签库 --%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>OGNL表达式</title>
</head>
<body>
<%-- value属性表示需要取出的变量对应的名称 --%>
<s:property value="'OGNL表达式 长度'"/>
<%-- value属性中含有单引号,访问字符串的length()方法 --%>
<s:property value="'OGNL表达式'.length()"/><br>
<%-- 获取Long包装类中的常量,最大值 --%>
<s:property value="'long类型的最大值'"/>
<s:property value="@java.lang.Long@MAX_VALUE"/><br>
<%-- 获取Math类中的静态常量,π --%>
<s:property value="'π = '"/>
<s:property value="@java.lang.Math@PI"/><br>
<%-- 获取Math类中的静态生成随机数方法 --%>
<s:property value="'随机数'"/>
<s:property value="@java.lang.Math@random()"/><br>
</body>
</html>
注意:通过OGNL访问静态方法、常量需要在struts.xml
中开启此功能。
<!-- 开启ognl访问静态方法、常量的功能 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
默认在default.properties
文件中是关闭的。
④、封装list数据
⑤、封装Map数据
<%--
Created by IntelliJ IDEA.
User: hestyle
Date: 2019/10/26
Time: 11:19 上午
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 使用OGNL表达式必须导入struts标签库 --%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>OGNL表达式</title>
</head>
<body>
<!-- label属性是浏览器显示的标签,name是表单后端的名称(如果是表单) -->
<%-- 封装一个list --%>
<s:radio list="{'女','男'}" label="性别" name="gender"/><br>
<%-- 封装一个map(注意有一个#号) --%>
<s:radio list="#{'true':'已婚','false':'未婚'}" label="是否已婚" name="married"/><br>
<s:checkboxlist list="#{'编码':'编码','撩妹':'撩妹','开车':'开车'}" label="爱好" name="hobbies"/><br>
</body>
</html>
四、在struts.xml中使用OGNL表达式
在上一篇博客 Struts2框架之文件下载演示了一个动态设置下载文件名的案例。
修改为在配置文件中调用java.net.URLEncoder
类的静态方法encode()
。
注意:在struts.xml中使用OGNL表达式格式为${变量名}
,与JSP中的EL表达式一毛一样。