我在後台將一個對象的list集合放到了值棧的Map棧中
Java code ? 1 2 3 4 public String getLastVersionPD(){ ActionContext.getContext().put( "pdList" , this .pdManager.getLastVersonPD()); return "listAction" ; }
然後在前台用OGNL運算式迭代
XML/HTML code ? 1 2 3 4 5 6 < s:iterator value = "#pdList" > < s:property value = "name" /> < s:property value = "version" /> < s:a action = "pdManagerAction_delete?key=%{key}" >刪除</ s:a > < a href = "javascript: showProcessImage('${requestScope.deploymentId}')" >查看流程圖</ a > </ s:iterator >
name version key deploymentId都是一個對象的屬性,迭代時是放在值棧的對象棧的頂部的,前邊的name version key使用OGNL運算式能在值棧的對象棧取到值,為什麼使用EL運算式也可以在request範圍取得deploymentId屬性呢
樓主這個問題,為什麼用el取request範圍的東西會同樣取到值棧的內容呢.這個問題就要結合struts2的源碼來說了,我們知道request在javaee裡面是HttpServletRequest它是一個介面裡面的一切封裝都是通過javax.servlet.http.HttpServletRequestWrapper類來實現的.struts2有自己的javax.servlet.http.HttpServletRequestWrapper實現,也就是在struts2-core包下的org.apache.struts2.dispatcher.StrutsRequestWrapper重新對getAttribute方法進行了重寫.
我們知道el運算式取request範圍的值就是調用request.getAttribute(String s);
一下這段是struts2的org.apache.struts2.dispatcher.StrutsRequestWrapper對getAttribute方法重寫的源碼部分
Java code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22