Struts2 值棧總結(ValueStack)
阿新 • • 發佈:2017-11-30
由於 壓入 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)