版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35537301/article/details/82017312
1、OGNL表达式
1.1 概述
- 全称:对象图导航语言(Object-Graph Navigation Language)
- 一种功能强大的开源表达式语言
- 使用这种表达式语言,可以通过某种表达式语法,存取Java对象的任意属性,调用Java对象的方法,同时能够自动实现必要的类型转换
- 如果把表达式看作是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁
- 在struts2中,ognl表达式就是默认的表达式语言
1.2 特点
即可以存值,也可以取值
1.3 使用前提
引入taglib标签库
<%--导入标签库--%>
<%@ taglib uri="/struts-tags" prefix="s" %>
2、OGNL表达式的基本用法
2.1 使用s:property标签输出内容
JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>
<!--
OGNL表达式的使用需要引入标签库
s:property:是一个输出语句
value:是把OGNLExpression当成变量,把变量的值输出到浏览器中
要想变成常量:
'OGNL表达式'或者是"OGNL表达式"
%{'OGNL表达式'}或者是%{"OGNL表达式"}
-->
<s:property value="OGNLExpression" /><hr>
<s:property value="'OGNLExpression'" /><br/>
<s:property value="%{'OGNLExpression'}" /><br/>
</body>
</html>
2.2 访问普通方法
页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>
<!--
OGNL表达式的使用需要引入标签库
s:property:是一个输出语句
value:是把OGNLExpression当成变量,把变量的值输出到浏览器中
要想变成常量:
'OGNL表达式'或者是"OGNL表达式"
%{'OGNL表达式'}或者是%{"OGNL表达式"}
-->
<!-- 调用普通方法 -->
长度:<s:property value="'OGNLExpression'.length()" /><br />
长度:<s:property value="%{'OGNLExpression'.length()}" /><br />
转大写:<s:property value="'OGNLExpression'.toUpperCase()" /><br />
转大写:<s:property value="%{'OGNLExpression'.toUpperCase()}" /><br />
分隔:<s:property value="'OGNLExpression'.split('E')" /><br />
分隔:<s:property value="%{'OGNLExpression'.split('E')}" /><br />
</body>
</html>
2.3 访问静态属性
页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>
<!--
访问静态属性
<s:property value="@包名.包名.类名@静态属性名"/>
-->
<!-- 访问静态属性 -->
最大整数:<s:property value="@java.lang.Integer@MAX_VALUE" />
</body>
</html>
2.4 访问静态方法
修改struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 开启开发者模式 -->
<constant name="struts.devMode" value="true" />
<!-- 开启静态方法调用 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name=""></action>
</package>
</struts>
页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>
<!--
在struts.xml文件中,开启静态方法调用
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
访问静态方法
<s:property value="@包名.包名.类名@静态方法名()"/>
-->
<!-- 访问静态方法 -->
随机数:<s:property value="@java.lang.Math@random()" />
</body>
</html>
2.5 操作集合(List和Map)
list集合
页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>
用HTML在浏览器上输出一个单选性别:list
<input type="radio" name="gender" id="m" value="男"/><label for="m">男</label>
<input type="radio" name="gender" id="f" value="女"/><label for="f">女</label>
<br/>
用Struts2的单选按钮标签输出一个单选
<%--s:radio用于在浏览器上显示一个单选按钮
list属性取值是一个OGNL表达式
{}就表示创建了一个List集合 List list = new ArrayList();
{'男','女'}
list.add("男");list.add("女");
--%>
<s:radio list="{'男','女'}" name="sex"></s:radio>
</body>
</html>
map集合
页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>
用HTML在浏览器上输出一个单选性别:Map结构
<input type="radio" name="gender" id="m" value="男"/><label for="m">男</label>
<input type="radio" name="gender" id="f" value="女"/><label for="f">女</label>
<br/>
<%--
当写了#{}之后就表示创建了一个集合对象:Map map = new HashMap();
里面的写法
#{'key':'value','key':'value'......}
--%>
<s:radio list="#{'male':'男','female':'女'}" name="sex" label="性别"></s:radio>
</body>
</html>
OGNL表达式练习
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>
<h1>使用EL表达式</h1>
${name}<br />
${req}<br />
${sess}<br />
<h1>使用OGNL表达式</h1>
<s:property value="name"/><br />
<!--
1、在map对象中获取数据:要加#
2、操作值栈中的数据,不用写#。
如果对象在当前Action动作类中的全局变量,直接取值即可user.username!因为当前动作类就在list集合的第一位置(即:栈顶)
如果对象直接添加到值栈对象中,则不用写user.username,直接写username即可!
-->
<s:property value="#request.req"/><br />
<s:property value="#session.sess"/><br />
</body>
</html>
action动作类
package com.itheima.web;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Demo01Action extends ActionSupport {
private String name = "tom";
public String getName() {
return name;
}
public String execute() {
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("req", "request01");
request.getSession().setAttribute("sess", "session01");
return SUCCESS;
}
}