OGNL遍曆list和map 以及訪問四個範圍的屬性值

來源:互聯網
上載者:User

假定在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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.