OGLLはlistとmapを遍歴し、4つの範囲の属性値にアクセスする

8649 ワード

struts 2のactionの属性ドメインに次のようなListとMap変数とStringオブジェクトを2つ定義すると仮定する
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ページでstruts 2ラベルとOGLL式を使用して以上の各範囲の値をとるコードは、次のとおりです.
<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.struts 2は常にactionのインスタンスをスタックの上部に配置します.actionは値スタックにあり、値スタックはOGLLのルートであるため、actionの属性を参照すると#を省略できます.
たとえばactionのプロパティtestnameにアクセスします.
actionContext  testname:<s:property value="testname" /> <br>

2.request、アプリケーション、セッションおよび要求パラメータparametersの値にアクセスするには、#request.xxxxのようなアクセス方式でアクセスする必要があります.
3.  =「{'1年目','2年目','3年目'}」を使用してlistを直接構築し,={'luo 1':'羅先橋1','luo 2':'羅先橋2','luo 3':'羅先橋3'}を使用してmapを直接構築した