Struts2之OGNL与值栈

1.从request中获取StackValue对象

String key = ServletActionContext.STRUTS_VALUESTACK_KEY;
HttpServletRequest request = ServletActionContext.getRequest();
ValueStack vs = (ValueStack)request.getAttribute(key);

1.1  向Root属性中添加无名对象

Student student = new Student("张三",18);
vs.getRoot().push(student);

1.2 向值栈中放入无名对象,实质也放在了Root属性中

Student student2 = new Student("李四",20);
vs.push(student2);

1.3   向值栈中直接放入有名对象,即map

     Student student3 = new Student("王五",22);
     Map<String,Student> map = new HashMap<String,Student>();
     map.put("student3", student3);
     vs.push(map);

1.4  向root中直接放入有名对象,即map

   Student student4 = new Student("赵六",24);
   vs.set("student4",student4);

1.5 将root当作ArrayList放入数据
       及获取田七这个student5对象

    Student student5 = new Student("田七",26);
    vs.getRoot().add(student5);

    //获取 4指的是在值栈中存储的下标
    Student stu = (Student)vs.getRoot().get(4);
    System.out.println(stu);

2.从ActionContext中获取StackValue对象

      ValueStack vs2 = ActionContext.getContext().getValueStack();

2.1从ValueStack中获取其属性context

      Map<String, Object> context = vs.getContext();
      context.put("city","zhengzhou" );

2.2直接获取其属性context

      ActionContext.getContext().put("city", "shanghai");

3.向Context中显式的放入数据

     有三种方式,分别为request、session、Application.

扫描二维码关注公众号,回复: 2873849 查看本文章
ActionContext.getContext().put("req", "context_value");      
ActionContext.getContext().getValueStack().set("req", "root_value"); //直接写在root
HttpServletRequest request2 =ServletActionContext.getRequest();
request2.setAttribute("req", "req_value");
ActionContext.getContext().getSession().put("ses","ses_value");
ActionContext.getContext().getApplication().put("app","app_value");

 接收将root当作ArrayList放入的数据 :其中#request.req底层执行的是request.getAttribute("req");
            #request.req被struts2包装后的查找顺序为:
            1.request域空间
            2.root
            3.context    

 #req = <s:property value="#req"/><br/>         <!-- #req = context_value-->
 req = <s:property value="req"/><br/>           <!--  req = root_value  -->                                  
 #request.req = <s:property value="#request.req"/><br/> <!--#request.req = req_value -->
 #ses = <s:property value="#session.ses"/><br/>        
 #app = <s:property value="#application.app"/><br/>
<!-- 从 page、request、session、application scopes依次查询 -->
 #attr.app = <s:property value="#attr.app"/><br/> 

4.向Context中隐式的放入数据

      所谓隐式,就是在action类中只声明成员变量而不进行任何操作。

      接收向context中隐式放入的数据

name = <s:property value="name"/><br/> 
password =  <s:property value="password"/><br/> 
#parameters.name = <s:property value="#parameters.name"/><br/> 
#parameters.password =  <s:property value="#parameters.password"/><br/> 
#action.name = <s:property value="#action.name"/><br/> 
#action.password =  <s:property value="#action.password"/><br/> 

5.创建与遍历

<br/>-----------------list--------------------<br/>
   <s:set name="myList" value="{'zs','ls','wu'}"/>
   <s:iterator  value="#myList">  <!--s:iterator 标签默认将当前的迭代对象放入到值栈栈顶-->
       <s:property/><br/>     <!--s:property 标签默认会输出值栈栈顶元素  -->
   </s:iterator>
<br/>-----------------Map--------------------<br/>
   <s:set name="myMap" value="#{'name':'wyy','age':'18'}"/>
   <s:iterator  value="#myMap">   
        <s:property/><br/>          
   </s:iterator>

   <s:iterator  value="#myMap" >   
        <s:property value="key"/> =  <s:property value="value"/><br/>          
   </s:iterator>
<br/>-----------------in not in--------------------<br/>
   <s:property value="'zs' in myList"/><br/> 
       <s:property value="'zs' not in myList"/><br/> 
<br/>-----------------创建Bean--------------------<br/>
    <s:bean name="com.beans.Student" id="stu">
         <s:param name="name" value="'张三'"/>
         <s:param name="age" value="18"/>
    </s:bean>

    <s:bean name="com.beans.Student" id="stu1">
         <s:param name="name" value="'李四'"/>
          <s:param name="age" value="20"/>
    </s:bean>

    <s:bean name="com.beans.Student" id="stu2">
          <s:param name="name" value="'王五'"/>
          <s:param name="age" value="22"/>
    </s:bean>
    <%-- <s:property value="#stu"/> --%>
<br/>-----------集合投影:将三个Student对象的name属性的值再组成一个List---------<br/>
    <s:set name="students" value="{#stu,#stu1,#stu2 }"></s:set>
    <s:set name="studentsName" value="#students.{name }"></s:set>

    <s:iterator value="#studentsName">
         <s:property /><br/>
    </s:iterator>
<br/>-----------集合查询:查询-------------------<br/>
    <s:iterator value="#students.{?#this.age >= 20}"><!-- 查询结果中的第一个用^ -->
         <s:property/><br/>
    </s:iterator>   
                                 
    <s:iterator value="#students.{^#this.age >= 20}"><!-- 查询结果中的第一个用^ -->
          <s:property/><br/>
    </s:iterator>

    <s:iterator value="#students.{$#this.age >= 20}"><!-- 查询结果中的最后一个用$ -->
       <s:property/><br/>
    </s:iterator>

猜你喜欢

转载自blog.csdn.net/wangyang668/article/details/81293355