valueStack对象的使用
是一个工具类,list结构
含有pop、peek、push方法操作list,值栈
先进后出,每次只能控制栈顶对象
Demo2Action.java
package com.itheima.web.action;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.itheima.domain.Student;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;
/*
* ActionContext数据存取
* */
public class Demo2Action extends ActionSupport {
/*
* 获取ValueStack对象,并且压栈操作
* */
public String demo2() {
//获取ActionContext对象
ActionContext context = ActionContext.getContext();//从当前线程上获取
//获取ValueStack对象
ValueStack vs = context.getValueStack();
//压栈操作
Student student = new Student("张三",18,"male");
vs.push(student);
return SUCCESS;
}
}
demo2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--设置浏览器的页面编码 --%>
<%--设置JSP编译成Servlet时使用的编码,可以只写这一句 --%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<%--规定 HTML 文档的字符编码 --%>
<meta charset="UTF-8">
<title>ValueStack的数据存取</title>
</head>
<body>
<%--
--%>
<hr>
<%--借助struts2的标签库查看ContextMap中的内容 --%>
<s:debug></s:debug>
</body>
</html>
Student.java
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--设置浏览器的页面编码 --%>
<%--设置JSP编译成Servlet时使用的编码,可以只写这一句 --%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<%--规定 HTML 文档的字符编码 --%>
<meta charset="UTF-8">
<title>ValueStack的数据存取</title>
</head>
<body>
<%--
--%>
<hr>
<%--借助struts2的标签库查看ContextMap中的内容 --%>
<s:debug></s:debug>
</body>
</html>
左侧为值栈中的对象,右侧为值栈中对象的数据
PropertyName显示的都是getXXX方法后面的部分,并且要把首字母改小写
获取值
%--
获取值栈中的数据也需要借助struts2的标签库
使用
s:property 获取
获取值栈的数据,是直接写属性名称,得到的就是属性的值
OGNL表达式的找法,是从栈顶逐个属性名称开始查找,只要找到之后,就不再继续查找,而是返回结果
--%>
姓名<s:property value="name"/>
年龄<s:property value="age"/>
性别<s:property value="gender"/>
把一个变量放入值栈,简单的操作:定义一个类的成员,并且生成它的get方法就可以了
private String name = "test";
public String getName() {
return name;
}
获取指定位置得属性
<%--获取指定位置的属性 --%>
获取第一个name:<s:property value="[0].name"/>
获取第二个name:<s:property value="[1].name"/>
<%--如果使用property没有写value属性,取得是栈顶对象
如果没有操作值栈时,默认得栈顶对象时当前执行得Action对象
--%>
压入List
List<Student> list = new ArrayList<Student>();
list.add(student);
vs.push(list);
不好取
是否使用EL表达式
仍然要使用EL表达式,当使用了struts2之后,它对reqest进行了增强,改变了EL表达式得搜索顺序
%:把OGNL表达式转成普通字符串%{""}
把字符串转成OGNL表达式%{}
#:获取ContextMap中的数据#key
在页面中可以创建Map集合#{}
$:EL表达式使用
可以在struts2得配置中使用OGNL表达式,(配置可以是文件,也可以是注解)
page、request、ValueStack、ActionContext、session、application