假定在struts2 的action的屬性域中定義2個如下的List和Map變數和一個String對象:
private List<String> testlist=new ArrayList<String>();</p><p>private Map<String,String> testmap=new HashMap<String,String>();</p><p>private String testname="hello,i am in valuestack"; //直接初始化了
並同時提供getter和setter方法.
在 action中的execute方法中有如下的賦值操作:
/*<br /> * OGNL測試代碼<br /> **/<br />HttpServletRequest request=ServletActionContext.getRequest(); //對應request<br />HttpSession session=request.getSession();//對應session<br />ServletContext context=ServletActionContext.getServletContext(); // 對應application</p><p>//構造普通的字串放到三個環境中<br />request.setAttribute("request_name", "來自request中的name");<br />context.setAttribute("application_name","來自application中的name");<br />session.setAttribute("session_name", "來自session中的name");</p><p>//構造一個list放到request中<br />List<String> request_names=new ArrayList<String>();<br />request_names.add("reqname1");<br />request_names.add("reqname2");<br />request_names.add("reqname3");<br />request.setAttribute("req_names", request_names); </p><p>//構造一個map放到rquest中<br />Map<String,String> request_maps=new HashMap<String,String>();<br /> request_maps.put("request_map1","request_value1");<br /> request_maps.put("request_map2","request_value2");<br /> request_maps.put("request_map3","request_value3");<br /> request.setAttribute("req_maps", request_maps); </p><p> //構造list放到session中<br />List<String> session_names=new ArrayList<String>();<br />session_names.add("sessionname1");<br />session_names.add("sessionname2");<br />session_names.add("sessionname3");<br />session.setAttribute("session_names", session_names); //放到request中</p><p>//構造一個map放到session中<br />Map<String,String> session_maps=new HashMap<String,String>();<br />session_maps.put("session_map1","session_value1");<br />session_maps.put("session_map2","session_value2");<br />session_maps.put("session_map3","session_value3");<br /> session.setAttribute("session_maps", session_maps);</p><p> //賦值到ActionContext值棧中的對象<br /> //ActionContext中的testlist<br /> testlist.add("vs144444");<br /> testlist.add("vs24444");<br /> testlist.add("vs34444");<br /> testlist.add("vs44444444");</p><p> //ActionContext中的testmap<br /> testmap.put("mp1", "vsmap1");<br /> testmap.put("mp2", "vsmap2");<br /> testmap.put("mp3", "vsmap3");<br /> testmap.put("mp4", "vsmap5555");</p><p> //ActionContext中的score<br /> testscore.put("語文",95);<br /> testscore.put("數學",75);<br /> testscore.put("英語",55);<br /> testscore.put("生物",65);<br /> testscore.put("物理",85);<br /> testscore.put("化學",44);
在該action跳轉後的視圖jsp頁面上使用struts2標籤和OGNL運算式取以上的各個範圍中的值的代碼為:
<hr>顯示來自各個範圍中的值<br><br />actionContext中的testname:<s:property value="testname" /> <br><br />request中的request_name:<s:property value="#request.request_name" /><br><br />application中的session_name:<s:property value="#application.application_name" /><br><br />session中的session_name:<s:property value="#session.session_name" /><br></p><p>遍曆request中的list:request_names<p><br /><s:iterator value="#request.req_names"><br /><s:property /><br><br /></s:iterator></p><p>遍曆request中的map:request_maps<p><br /><s:iterator value="#request.req_maps"><br /><s:property value="key"/>=<s:property value="value" /><br><br /></s:iterator></p><p>遍曆session中的list:session_names<p><br /><s:iterator value="#session.session_names"><br /><s:property /> <br><br /></s:iterator></p><p>遍曆session中的map:session_maps<p><br /><s:iterator value="#session.session_maps"><br /><s:property value="key"/>=<s:property value="value" /><br><br /></s:iterator></p><p>遍曆ActionContext中的testlist=========================<p><br /><s:iterator value="testlist" ><br /><s:property /><br><br /></s:iterator></p><p>遍曆actionContext中的testmap<p><br /><s:iterator value="testmap"><br /><s:property value="key"/>=<s:property value="value" /><br><br /></s:iterator></p><p> 直接遍曆list<p><br /><s:iterator value="{'第一年','第二年','第三年'}" ><br /><s:property /><br><br /></s:iterator></p><p>直接遍曆map <p><br /><s:iterator value="#{'luo1':'羅先橋1','luo2':'羅先橋2','luo3':'羅先橋3'}"><br /><s:property value="key" />:<s:property value="value"/><br><br /></s:iterator></p><p>遍曆actionContext中的testscore這個map<p><br /><s:iterator value="testscore"><br /><s:property value="key"/>:<br /><s:if test="value<60"><br />不及格<br><br /></s:if><br /><s:elseif test="value>=60 && value<75"><br />及格<br><br /></s:elseif><br /><s:elseif test="value>=75 && value<85"><br />良好<br><br /></s:elseif><br /><s:else><br />優秀<br><br /></s:else><br /></s:iterator>
顯示的結果為:
顯示來自各個範圍中的值<br />actionContext中的testname:hello,i am in valuestack<br />request中的request_name:來自request中的name<br />application中的session_name:來自application中的name<br />session中的session_name:來自session中的name</p><p>遍曆request中的list:request_names<br />reqname1<br />reqname2<br />reqname3</p><p>遍曆request中的map:request_maps<br />request_map1=request_value1<br />request_map2=request_value2<br />request_map3=request_value3</p><p>遍曆session中的list:session_names<br />sessionname1<br />sessionname2<br />sessionname3</p><p>遍曆session中的map:session_maps<br />session_map1=session_value1<br />session_map2=session_value2<br />session_map3=session_value3</p><p>遍曆ActionContext中的testlist=========================<br />vs144444<br />vs24444<br />vs34444<br />vs44444444</p><p>遍曆actionContext中的testmap<br />mp1=vsmap1<br />mp2=vsmap2<br />mp4=vsmap5555<br />mp3=vsmap3</p><p>直接遍曆list<br />第一年<br />第二年<br />第三年</p><p>直接遍曆map<br />luo1:羅先橋1<br />luo2:羅先橋2<br />luo3:羅先橋3</p><p>遍曆actionContext中的testscore這個map<br />物理: 優秀<br />語文: 優秀<br />英語: 不及格<br />數學: 良好<br />化學: 不及格<br />生物: 及格
說明幾個地方:
1. struts2總是將action的執行個體放置在棧頂,因為action在值棧中,而值棧又是OGNL的根,所以引用action中的屬性可以省略#
例如我們訪問action中的屬性testname:
actionContext中的testname:<s:property value="testname" /> <br>
2. 訪問request,application,session以及請求參數parameters的值,需要使用#request.xxxx 這樣的訪問方式訪問
3. 使用="{'第一年','第二年','第三年'}" 直接構造一個list ,使用=#{'luo1':'羅先橋1','luo2':'羅先橋2','luo3':'羅先橋3'} 直接構造了一個map