Value stack棧中的值:
每一個動作在執(zhí)行相應(yīng)方法之前,都會創(chuàng)建一個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中進行簡單的數(shù)據(jù)校驗:
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鏈接.下面的圖片中灰色背景的將顯示出來, 還有很多. 抓圖沒辦法全部抓下來.

可以發(fā)現(xiàn),在值棧中,都是以Map形式存儲的值,actionErrors存儲的是action的錯誤.fieldErrors存儲的屬性錯誤.errors包含這兩者.
看下面的Stack Context.顧名思義,棧的上下文環(huán)境.
訪問的時候,通過#key來訪問.如下:假設(shè)reques中有名為obj屬性的值.使用OGNL表達式訪問.
<s:property value="#request.obj” />這樣就可以取到stack Context中的值.