struts2_day04_OGNL表达式

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
	}
}

http://localhost:8080/struts_day03/demo1.action

猜你喜欢

转载自blog.csdn.net/qq_35537301/article/details/82017312