1、OGNL是Object-Graph Navigation Language(对象图导航语言)的缩写
* 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其他对象
* 通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性
2、Struts2框架使用OGNL作为默认的表达式语言
* OGNL是一种比EL强大很多倍的语言
* xwork提供OGNL表达式
* ognl-3.0.5.jar
3、OGNL提供五大类功能
* 支持对象方法调用
* 支持类静态的方法调用和值访问
* 访问OGNL上下文(OGNL context)和ActionContext
* 支持赋值操作和表达式串联
* 操作集合对象
4、测试的代码
* 获取上下文、获取根对象、存储数据,获取值
/**
* 简单演示OGNL表达式
* @throws OgnlException
*/
@Test
public void run1() throws OgnlException {
// 上下文对象
OgnlContext context = new OgnlContext();
// 获取到根对象
Object root = context.getRoot();
// 存储数据
context.put("name", "小明");
// 获取值,表达式写法
Object value = Ognl.getValue("#name", context, root);
System.out.println(value); //小明
}
* OGNL表达式方法的调用
/**
* OGNL表达式方法的调用
* @throws OgnlException
*/
@Test
public void run2() throws OgnlException {
// 上下文对象
OgnlContext context = new OgnlContext();
// 获取到根对象
Object root = context.getRoot();
// 获取值,表达式写法
Object value = Ognl.getValue("'haha'.length()", context, root);
System.out.println(value); // 4
}
5、在Struts2框架中使用OGNL表达式
1)Struts2引入了OGNL表达式,主要是在JSP页面中获取值栈中的值
2)具体在Struts2中如何使用,步骤如下:
* 需要先引入Struts2的标签库
<%@ taglib prefix="s" uri="/struts-tags" %>
* 使用Struts2标签库提供的标签
<s:property value="OGNL表达式">
3)在JSP页面使用OGNL表达式
* 访问对象方法
<s:property value="'hello'.length()" />
Jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 引入Struts2标签库 -->
<%@ 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>Insert title here</title>
</head>
<body>
<h3>条件: 加入值栈中已经存入值了,在JSP页面上值栈中获取值</h3>
<!--
1.先引入Struts2框架提供的标签库, s标签
2.可以使用提供的标签(很多,掌握重点的标签)
-->
<!-- 从值栈中获取值的 value中间编写OGNL的表达式 -->
<s:property value="'username'.length()"/>
</body>
</html>