ognl 获取服务器 四大范围中的值

假定在struts2 的action的属性域中定义2个如下的List和Map变量和一个String对象:

private List<String> testlist=new ArrayList<String>();  
      
private Map<String,String> testmap=new HashMap<String,String>();  
  
private String testname="hello,i am in valuestack";  //直接初始化了  

并同时提供getter和setter方法.

 

在 action中的execute方法中有如下的赋值操作:

/* 
         * OGNL测试代码 
         **/  
        HttpServletRequest request=ServletActionContext.getRequest();     //对应request  
        HttpSession session=request.getSession();                           //对应session  
        ServletContext context=ServletActionContext.getServletContext();  // 对应application  
          
          
        //构造普通的字符串放到三个环境中  
        request.setAttribute("request_name",  "来自request中的name");  
        context.setAttribute("application_name","来自application中的name");  
        session.setAttribute("session_name", "来自session中的name");  
          
        //构造一个list放到request中  
        List<String> request_names=new ArrayList<String>();  
        request_names.add("reqname1");  
        request_names.add("reqname2");  
        request_names.add("reqname3");  
        request.setAttribute("req_names", request_names);    
          
        //构造一个map放到rquest中  
        Map<String,String> request_maps=new HashMap<String,String>();  
        request_maps.put("request_map1","request_value1");  
        request_maps.put("request_map2","request_value2");  
        request_maps.put("request_map3","request_value3");  
        request.setAttribute("req_maps", request_maps);    
          
        //构造list放到session中  
        List<String> session_names=new ArrayList<String>();  
        session_names.add("sessionname1");  
        session_names.add("sessionname2");  
        session_names.add("sessionname3");  
        session.setAttribute("session_names", session_names);  //放到request中  
          
        //构造一个map放到session中  
        Map<String,String> session_maps=new HashMap<String,String>();  
        session_maps.put("session_map1","session_value1");  
        session_maps.put("session_map2","session_value2");  
        session_maps.put("session_map3","session_value3");  
        session.setAttribute("session_maps", session_maps);  
          
          
        //赋值到ActionContext值栈中的对象  
        //ActionContext中的testlist         
        testlist.add("vs144444");  
        testlist.add("vs24444");  
        testlist.add("vs34444");  
        testlist.add("vs44444444");  
          
      //ActionContext中的testmap      
        testmap.put("mp1", "vsmap1");  
        testmap.put("mp2", "vsmap2");  
        testmap.put("mp3", "vsmap3");  
        testmap.put("mp4", "vsmap5555");  
          
        //ActionContext中的score  
        testscore.put("语文",95);  
        testscore.put("数学",75);  
        testscore.put("英语",55);  
        testscore.put("生物",65);  
        testscore.put("物理",85);  
        testscore.put("化学",44);  


在该action跳转后的视图jsp页面上使用struts2标签和OGNL表达式取以上的各个范围中的值的代码为:

<hr>显示来自各个范围中的值<br>  
actionContext中的testname:<s:property value="testname" /> <br>  
request中的request_name:<s:property value="#request.request_name" /><br>  
application中的session_name:<s:property value="#application.application_name" /><br>  
session中的session_name:<s:property value="#session.session_name" /><br>  
  
遍历request中的list:request_names<p>  
<s:iterator value="#request.req_names">  
    <s:property /><br>   
</s:iterator>  
  
遍历request中的map:request_maps<p>  
<s:iterator value="#request.req_maps">  
    <s:property value="key"/>=<s:property value="value" /><br>  
</s:iterator>  
  
遍历session中的list:session_names<p>  
<s:iterator value="#session.session_names">  
    <s:property /> <br>  
</s:iterator>  
  
遍历session中的map:session_maps<p>  
<s:iterator value="#session.session_maps">  
    <s:property value="key"/>=<s:property value="value" /><br>  
</s:iterator>  
  
遍历ActionContext中的testlist=========================<p>  
<s:iterator value="testlist" >  
    <s:property /><br>  
</s:iterator>  
  
遍历actionContext中的testmap<p>  
<s:iterator value="testmap">  
    <s:property value="key"/>=<s:property value="value" /><br>  
</s:iterator>  
  
  
  
 直接遍历list<p>  
<s:iterator value="{'第一年','第二年','第三年'}" >  
    <s:property /><br>  
</s:iterator>  
  
直接遍历map <p>  
<s:iterator value="#{'luo1':'罗先桥1','luo2':'罗先桥2','luo3':'罗先桥3'}">  
    <s:property value="key" />:<s:property value="value"/><br>  
</s:iterator>  
  
遍历actionContext中的testscore这个map<p>  
<s:iterator value="testscore">  
    <s:property value="key"/>:  
    <s:if test="value<60">  
    不及格<br>  
    </s:if>  
    <s:elseif test="value>=60 && value<75">  
    及格<br>  
    </s:elseif>  
    <s:elseif test="value>=75 && value<85">  
    良好<br>  
    </s:elseif>  
    <s:else>  
    优秀<br>  
    </s:else>  
</s:iterator>  


显示的结果为:

显示来自各个范围中的值  
actionContext中的testname:hello,i am in valuestack  
request中的request_name:来自request中的name  
application中的session_name:来自application中的name  
session中的session_name:来自session中的name  
  
遍历request中的list:request_names  
reqname1  
reqname2  
reqname3  
  
遍历request中的map:request_maps  
request_map1=request_value1  
request_map2=request_value2  
request_map3=request_value3  
  
  
遍历session中的list:session_names  
sessionname1  
sessionname2  
sessionname3  
  
  
遍历session中的map:session_maps  
session_map1=session_value1  
session_map2=session_value2  
session_map3=session_value3  
  
  
遍历ActionContext中的testlist=========================  
vs144444  
vs24444  
vs34444  
vs44444444  
  
  
遍历actionContext中的testmap  
mp1=vsmap1  
mp2=vsmap2  
mp4=vsmap5555  
mp3=vsmap3  
  
直接遍历list  
第一年  
第二年  
第三年  
  
  
直接遍历map  
luo1:罗先桥1  
luo2:罗先桥2  
luo3:罗先桥3  
  
  
遍历actionContext中的testscore这个map  
物理: 优秀  
语文: 优秀  
英语: 不及格  
数学: 良好  
化学: 不及格  
生物: 及格  


说明几个地方:

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

你可能感兴趣的:(ognl 获取服务器 四大范围中的值)