Struts2框架之OGNL表达式快速扫盲

一、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属性的值当字符串输出,加单引号即可

Struts2框架之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"/><br>
    <%-- value属性中含有单引号,表示直接输出字符串"GNL表达式" --%>
    <s:property value="'OGNL表达式'"/>
</body>
</html>

浏览器访问index.jsp页面
Struts2框架之OGNL表达式快速扫盲

三、OGNL的功能

①、访问对象方法
②、访问静态属性
③、访问静态方法

Struts2框架之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>

Struts2框架之OGNL表达式快速扫盲
\color{red}注意:注意:通过OGNL访问静态方法、常量需要在struts.xml中开启此功能。
Struts2框架之OGNL表达式快速扫盲

<!-- 开启ognl访问静态方法、常量的功能 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>

默认在default.properties文件中是关闭的。
Struts2框架之OGNL表达式快速扫盲

④、封装list数据
⑤、封装Map数据

Struts2框架之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>
    <!-- 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>

Struts2框架之OGNL表达式快速扫盲

四、在struts.xml中使用OGNL表达式

在上一篇博客 Struts2框架之文件下载演示了一个动态设置下载文件名的案例。
Struts2框架之OGNL表达式快速扫盲Struts2框架之OGNL表达式快速扫盲修改为在配置文件中调用java.net.URLEncoder类的静态方法encode()
Struts2框架之OGNL表达式快速扫盲

Struts2框架之OGNL表达式快速扫盲\color{red}注意:注意:在struts.xml中使用OGNL表达式格式为${变量名},与JSP中的EL表达式一毛一样。

上一篇:兼容IE、火狐、谷歌及所有浏览器的悬浮代码


下一篇:search_path在PostgreSQL函数开发中的注意事项