3.3 值栈

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" %>



<%--规定 HTML 文档的字符编码 --%>


ValueStack的数据存取


<%--
--%>




<%--借助struts2的标签库查看ContextMap中的内容 --%>

Student.java

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%--设置浏览器的页面编码 --%>
    <%--设置JSP编译成Servlet时使用的编码,可以只写这一句 --%>
    
<%@ taglib uri="/struts-tags" prefix="s" %>



<%--规定 HTML 文档的字符编码 --%>


ValueStack的数据存取


<%--
--%>




<%--借助struts2的标签库查看ContextMap中的内容 --%>
3.3 值栈_第1张图片

左侧为值栈中的对象,右侧为值栈中对象的数据
PropertyName显示的都是getXXX方法后面的部分,并且要把首字母改小写

获取值

%--
获取值栈中的数据也需要借助struts2的标签库
使用
    s:property  获取
    获取值栈的数据,是直接写属性名称,得到的就是属性的值
    
    OGNL表达式的找法,是从栈顶逐个属性名称开始查找,只要找到之后,就不再继续查找,而是返回结果
--%>
姓名
年龄
性别
3.3 值栈_第2张图片

把一个变量放入值栈,简单的操作:定义一个类的成员,并且生成它的get方法就可以了

    
    private String name = "test";
    
    public String getName() {
        return name;
    }
3.3 值栈_第3张图片

获取指定位置得属性

<%--获取指定位置的属性 --%>
获取第一个name:
获取第二个name:
<%--如果使用property没有写value属性,取得是栈顶对象
如果没有操作值栈时,默认得栈顶对象时当前执行得Action对象
--%>
3.3 值栈_第4张图片

压入List

List list = new ArrayList();
        list.add(student);
        vs.push(list);
3.3 值栈_第5张图片

不好取

是否使用EL表达式

仍然要使用EL表达式,当使用了struts2之后,它对reqest进行了增强,改变了EL表达式得搜索顺序

%:把OGNL表达式转成普通字符串%{""}
把字符串转成OGNL表达式%{}
#:获取ContextMap中的数据#key
在页面中可以创建Map集合#{}
$:EL表达式使用
可以在struts2得配置中使用OGNL表达式,(配置可以是文件,也可以是注解)

page、request、ValueStack、ActionContext、session、application

你可能感兴趣的:(3.3 值栈)