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";
}
}
}
提交地址:
点击Debug链接.下面的图片中灰色背景的将显示出来, 还有很多. 抓图没办法全部抓下来.
可以发现,在值栈中,都是以Map形式存储的值,actionErrors存储的是action的错误.fieldErrors存储的属性错误.errors包含这两者.
看下面的Stack Context.顾名思义,栈的上下文环境.
访问的时候,通过#key来访问.如下:假设reques中有名为obj属性的值.使用OGNL表达式访问.
<s:property value="#request.obj” />这样就可以取到stack Context中的值.