Value stack栈中的值:

每一个动作在执行相应方法之前,都会创建一个value stack的对象。value stack用来保存这个动作对象和其他对象。

可以使用el表达式和Struts2标签进行对值栈的访问:

使用Struts2标签,需要引入标签库:

<%@taglib prefix="s" uri="/struts-tags"%>

   

<body>

       ${errors.name[0]}

       <br />

       <s:property value="errors.name[0]" />

       <s:debug /><!-- debug标签会将页面访问到的栈值通过一个a标签显示出来 -->

    </body>

 

Action中进行简单的数据校验:

package actions;

 

import com.opensymphony.xwork2.ActionSupport;

import enetitys.User;

 

public class UserAction extends ActionSupport {

   

    private User user;

   

    public User getUser() {

       return user;

    }

 

    public void setUser(User user) {

       this.user = user;

    }

 

    public String add(){

       System.out.println("name="+user.getName());

       System.out.println("admin".equals(user.getName()));

       if("admin".equals(user.getName())){

           return SUCCESS;

       }else{

           this.addFieldError("name", "该用户不存在!"); //添加一个属性错误.

           return "error";

       }

    }  

}

 

提交地址:

Struts2中的Value Stack/Stack Context - 盡頭 - 深山憨娃

点击Debug链接.下面的图片中灰色背景的将显示出来, 还有很多. 抓图没办法全部抓下来.

Struts2中的Value Stack/Stack Context - 盡頭 - 深山憨娃

可以发现,在值栈中,都是以Map形式存储的值,actionErrors存储的是action的错误.fieldErrors存储的属性错误.errors包含这两者.

看下面的Stack Context.顾名思义,栈的上下文环境.

访问的时候,通过#key来访问.如下:假设reques中有名为obj属性的值.使用OGNL表达式访问.

<s:property value="#request.obj” />这样就可以取到stack Context中的值.