struts 值棧 通過get set方法 友善的擷取,設定屬性值 例如從jsp頁面傳來的參數。。。從action設定jsp所要回顯的内容
注意el表達式,struts2對request進行了封裝,是以它的查找順序 多了一個findvalue() 如上圖
再看下面的代碼:
public class useraction {
private string username;
//檢視使用者的詳細資訊
public string detail(){
username = "張三";
list list = new arraylist();
for(int i=0; i<10; i++){
user user = new user();
user.setusername("user"+i);
list.add(user);
}
actioncontext.getcontext().put("users", list);
user u = new user();
u.setusername("趙毅");
actioncontext.getcontext().getvaluestack().push(u);
return "detail";
}
對應的jsp如下:
1: <s:property value="username"/> <br/>
2: <s:iterator value="#users">
3: <s:property value="username"/>
4: <s:property value="#root[2].username"/><br/>
5: </s:iterator>
6: <s:property value="username"/>
7: <s:property value="#root[1].username"/> <!-- 張三 -->
根據剛才的示例,我們知道,第1行的username是“趙毅”(因為jsp在執行這行代碼的時候,compoundroot中有兩個元素:第0個是“user對象趙毅”,第1個是“useraction對象張三”),是以第1行的username将取出compoundroot中第0個元素的username屬性:趙毅
第2行代碼是iterator标簽,隻定義了一個value屬性,iterator标簽将循環通路users這個list中的user對象,并把目前循環的user對象壓入到compoundroot中!是以,在第3行和第4行代碼被執行的時候,compoundroot中總共有3個元素:第0個元素是被iterator标簽壓入的目前循環的user對象;第1個元素是“user對象趙毅”;第2個元素是“useraction對象張三”,是以第3行代碼的執行結果就是輸出“userx”,即目前循環的user對象的username屬性!iterator标簽将會依次取出list中的user對象,并不斷壓入/彈出user對象(每次循環,都将執行一遍壓入/彈出)。而第4行代碼取第2個元素的username屬性,即useraction對象的username屬性:張三。
第5行代碼執行完成之後,在compoundroot中将剩下2個元素,與第2行代碼被執行之前一樣。是以,第6行代碼的輸出和第1行代碼的輸出結果是一樣的,而第7行代碼将取出useraction對象的username屬性:張三