3.struts2把ValueStack對象保存在名爲:struts.valueStack的request域中.即ValueStack做用域爲request.當action建立的時候,ValueStack就建立了,action被銷燬的時候,ValueStack就銷燬了 java
4 .ValueStack中的數據分兩部分存放:root(棧結構,CompoundRoot)和context(map形式,OgnlContext)(3)ValueStack valueStack = (ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack"); web
6.ValueStack內存結構圖 session
7.經常使用的存儲數據的方法
(1)向map棧中存數據,即ValueStack中的context(OgnlContext)
* 經過request,session等向map中存儲數據
ServletActionContext.getRequest().setAttribute("username","joey");
ServletActionContext.getSession().put("pwd","123");
* 直接向map棧中放數據
ActionContext.getContext().put("msg","how you doing");
(2)向對象棧中存數據,即ValueStack中的root(CompoundRoot)對象
* 先獲得root,再把數據壓入到root中,這中方式是放入到棧底.
ValueStack valueStack = ActionContext.getContext().getValueStack();
valueStack.getRoot().add(new Person());
* 先獲得root,利用add(index,Object)把一個對象壓入到root中指定位置.
ValueStack valueStack = ActionContext.getContext().getValueStack();
valueStack.getRoot().add(0,new Person());//這裏0,表示壓入棧頂.
* 存放一個map到對象棧中
ValueStack valueStack = ActionContext.getContext().getValueStack();
valueStack.set("msg","dude"); //先封裝成Map,在把Map放入到對象棧中,且放入棧頂.
* 利用valueStack的push方法把一個對象直接壓入棧頂
ValueStack valueStack = ActionContext.getContext().getValueStack();
valueStack.push(new Person()); app
8.利用OGNL表達式取ValueStack中的數據
(1)<s:property />:取棧頂的元素.
(2)<s:iterator />:取棧頂的元素.
注意:此標籤的value屬性值不管來自對象棧仍是Map棧,均可以不加#前綴(<s:select/>標籤也適用).
由於此標籤在迭代的時候,老是把當前正在迭代的元素放入到棧頂. jsp
2、ognl
1.ognl是struts2中使用的一種表達式語言,可用於jsp的標籤庫中,以方便訪問各類對象的屬性.
它用於把界面的參數傳遞到Action中(並進行類型轉換),它還能夠用於struts2的配置文件中.
2.Root對象
OGNL稱爲對象圖導航語言,所謂對象圖,即以任意一個對象爲根,經過OGNL能夠訪問與這個對象關聯的其它對象.
例如: spa
public class User{ private String username; private Group group; //省略setter,getter方法 } public class Group{ private String name; private Organization org; //省略setter,getter方法 } public class Organization{ private String orgId; //省略setter,getter方法 }