使用OGNL访问对象方法和静态方法
除了在 JSP 页面中可以使用 OGNL 表达式以外,OGNL 还支持在 Java 代码中访问对象方法和静态方法,接下来本节中将讲解 OGNL 是如何调用方法的。
在 StrutsDemo05 项目的 com.mengma.ognl 包中创建一个名为 TestOgnl01 的类,编辑后如下所示。
图 1 使用OGNL调用对象的输出结果
从图 1 的输出结果中可以看出,Person 对象的 name 属性值已经被成功取出。那么,根对象在关联其他对象的方法时要如何调用呢?下面通过修改 TestOgnl01 类演示根对象关联其他对象方法的调用。
首先在 com.mengma.ognl 包中创建一个名为 Group 的类,类中包含一个 name 属性及其 getter 和 setter 方法,然后在 Person 类中增加 Group 属性及其 getter 和 setter 方法,接下来在 TestOgnl01 的 main() 方法中添加如下代码:
图 2 根对象关联其他对象方法时的输出结果
图 3 使用OGNL访问静态属性和静态方法的浏览器输出
MyEclipse 控制台的输出结果如图 4 所示。
图 4 使用OGNL访问静态属性和静态方法的控制台输出
从图 3 和图 4 的显示结果中可以看出,已经成功在页面中使用 OGNL 访问 Java 类中的静态属性和静态方法。
1. OGNL访问对象方法
OGNL 表达式通过“对象名.方法名()”的形式调用对象方法表达式,如果是调用根对象的方法,则可以直接使用方法的名称调用,其调用语法如下所示:Ognl.getValue("方法名",对象名);
其实无论 OGNL 表达式以哪种方式取值或者调用方法,最终都是调用其本身的 getValue() 方法。接下来通过一个案例演示 OGNL 如何在 Java 代码中调用对象方法。在 StrutsDemo05 项目的 com.mengma.ognl 包中创建一个名为 TestOgnl01 的类,编辑后如下所示。
package com.mengma.ognl; import ognl.OgnlException; public class TestOgnl01 { public static void main(String[] args) { Person person = new Person(); person.setName("admin"); try { System.out.println(ognl.Ognl.getValue("name", person)); } catch (OgnlException e) { e.printStackTrace(); } } }上述代码的输出语句中,使用了 OGNL 表达式的方式获取 Person 对象中的 name 属性值,运行 main() 方法后,控制台的输出结果如图 1 所示。
图 1 使用OGNL调用对象的输出结果
从图 1 的输出结果中可以看出,Person 对象的 name 属性值已经被成功取出。那么,根对象在关联其他对象的方法时要如何调用呢?下面通过修改 TestOgnl01 类演示根对象关联其他对象方法的调用。
首先在 com.mengma.ognl 包中创建一个名为 Group 的类,类中包含一个 name 属性及其 getter 和 setter 方法,然后在 Person 类中增加 Group 属性及其 getter 和 setter 方法,接下来在 TestOgnl01 的 main() 方法中添加如下代码:
Group group = new Group(); //创建Group对象 group.setName("第一小组"); //设置Group对象的name值 person.setGroup(group); // 将group对象添加到person中 System.out.println(ognl.Ognl.getValue("group", person)); System.out.println(ognl.Ognl.getValue("name", group));在上述代码的输出语句中,首先调用了 Person 根对象的 getGroup() 方法得到 group 对象,然后调用 group 对象的 getName() 方法,获取 Person 对象中 group 对象的 name 属性值。运行 TestOgnl01 的 main() 方法后,控制台的输出结果如图 2 所示。
图 2 根对象关联其他对象方法时的输出结果
2. OGNL 访问静态方法和静态属性
OGNL 同时支持静态方法和静态属性的调用,其语法格式如下所示:
@类的全路径名@属性名称
@类的全路径名@方法名称(参数列表)
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
在上述代码配置了一个名称为 struts.ognl.allowStaticMethodAccess 的常量,并将其值设置为 true,这就表示开启了访问静态方法的支持。接下来通过一个案例演示如何使用 OGNL 访问静态方法和静态属性。1)创建测试类 TestOgnl02
在 struts2Demo05 项目的 com.mengma.ognl 包中,创建一个名称为 TestOgnl02 的类,编辑后如下所示。package com.mengma.ognl; public class TestOgnl02 { public static String staticValue="这是静态属性值"; public static void testMethod(){ System.out.println("这是静态方法"); } }上述代码中,首先创建了一个 String 类型的静态属性 staticValue,并将其属性值设为“这是静态属性值”,然后创建了一个静态方法,并在方法中使用输出语句打印信息。
2)修改配置文件
在配置文件 struts.xml 中,添加用于开启对静态方法访问的支持代码。3)创建 index.jsp 页面
在项目的 WebContent 目录下,创建一个名称为 index.jsp 的页面,编辑后如下所示。<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>OGNL访问静态属性和静态方法</title> </head> <body> 获取的静态属性值为: <s:property value="@com.mengma.ognl.index.jsp@staticValue"/><br/> <hr/> 调用静态方法的结果请查看控制台 <s:property value="@com.mengma.ognl.TestOgnl02@testMethod()"/> </body> </html>上述代码中,首先引入了 Struts2 的标签库,然后在其 <body> 元素内,分别使用 OGNL 获取了 TestOgnl02 中定义的静态属性值和静态方法。
4)启动项目并查看结果
启动 Tomcat 服务器,在浏览器的地址栏中输入地址 http://localhost:8080/strutsDemo05/index.jsp 访问 index.jsp,浏览器的输出结果如图 3 所示。图 3 使用OGNL访问静态属性和静态方法的浏览器输出
MyEclipse 控制台的输出结果如图 4 所示。
图 4 使用OGNL访问静态属性和静态方法的控制台输出
从图 3 和图 4 的显示结果中可以看出,已经成功在页面中使用 OGNL 访问 Java 类中的静态属性和静态方法。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频
优秀文章
- 位操作及其使用注意事项,C语言位操作及其使用方法详解
- C++(STL) lexicographical_compare字符串排序算法详解
- Shell数组拼接,Shell数组合并
- Shell expr命令:进行整数计算
- Python Matplotlib time、xlabel、ylabel、xticks、yticks函数:设置坐标轴
- Maven仓库及管理方式介绍
- JSP JSTL <c:url>标签:生成URL地址标签
- Struts2 ActionContext.getSession()法:获取session
- SpringWeb <form:textarea>标签:定义表单的文本域组件
- JS在接收表单数据时过滤特殊字符