1. 程式人生 > >Struts2 值棧總結(ValueStack)

Struts2 值棧總結(ValueStack)

由於 壓入 system 因此 getc 進行 接口 上下文 通過

1、獲取值棧

1 //獲取值棧的第一種方式
2         ValueStack valueStack1 = (ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack");
3         //獲取值棧的第二種方式
4         ValueStack valueStack2 = ActionContext.getContext().getValueStack();
5         System.out.println(valueStack1);
6         System.out.println(valueStack2);

2、值棧包括兩部分:root棧和map棧

  1、root棧:繼承了List接口,又稱之為對象棧

  2、map棧:實現了Map接口,又可以稱之為上下文棧(context)

3、Root棧的存值和取值

  1、存值(先進後出)

 1 1、Push壓棧   (獲取值棧)
 2     valueStack.push("zhangsan");
 3 2、set 壓入棧頂 (鍵值對形式)
 4     //set:創建一個map集合,將數據存入該集合中,最終將map集合壓入root棧棧頂
 5     valueStack2.set("name","wangwu");
 6 3、使用成員變量方式
7 private String name = "maliu"; 8 9 public String getName() { 10 return name; 11 }

  2、取值

1、Push 取值
    <!-- 
        通過s:property標簽獲取數據 
        value:是一個ognl表達式,通過valu值可以到值棧中去查詢對應的數據
        [0].top:表示獲取root棧棧頂的數據
    -->
    獲取棧頂數據:<s:property value="[0].top"/><br>
    獲取棧頂數據:
<s:property/><br> 2、set 取值 Or 成員變量方式存值 <%-- 如果棧頂是map集合:通過集合的key可以直接獲取value值 通過name到值棧中從上往下進行查找,找到的第一個進行返回 --%> 獲取棧頂map中的數據:<s:property value="name"/><br>

3、Map棧的存值和取值

  1、存值 or 取值(表示直接從map棧查找,而不是從root棧棧頂開始從上往下查找。)

 1 1、Put 方法存值
 2     //將數據存入map棧
 3     //由於map棧本質就是一個集合,因此存儲方式和map一樣
 4     ActionContext.getContext().put("name", "tianqi");
 5 2、取值
 6     <%--
 7     從map棧獲取數據:在ognl表達式中使用#表示直接從map棧查找數據
 8      --%>
 9      
10     獲取map棧中的數據:<s:property value="#name"/>

4、%主要作用是控制解析或者不解析

   1 “%”符號的用途是在標簽的屬性值被理解為字符串類型時,告訴執行環境%{}裏的是OGNL表 達式,就比如:<s:textfield value=”%{username}”>。 也可在OGNL表達式中,添加%{‘ ’}或者’’,來讓其變成普通 2 字符串而不解析,比如:<s:property value=”%{‘username}’”> 3 4   簡單的說:%表達式的作用是,可以讓字符串變成支持ognl表達式的解析,也可以讓解析的表達式變成字符串,

5、$號的使用

  $主要作用是在相關配置文件中引入OGNL表達式,讓其在配置文件中也能解析OGNL表達式。(換句話說:$用於在配置文件中獲取值棧的值用的。)

Struts2 值棧總結(ValueStack)