zoukankan      html  css  js  c++  java
  • struts2:OGNL表达式,遍历List、Map集合;投影的使用

    OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

    片头(ognl.jsp)

    <%
        request.setAttribute("para", "request scope attribute");
        request.getSession().setAttribute("para", "session scope attribute");
        request.getSession().getServletContext().setAttribute("para", "aplication scope attribute");
    
        List<Student> listStudent = new ArrayList<Student>();
        listStudent.add(new Student(1, "张三", new Date()));
        listStudent.add(new Student(2, "李四", new Date()));
        listStudent.add(new Student(3, "赵五", new Date()));
        listStudent.add(new Student(4, "孙六", new Date()));
        listStudent.add(new Student(5, "钱七", new Date()));
        pageContext.setAttribute("listStudent", listStudent);
    %>

    调用

    http://127.0.0.1:8080/st/ssh/demo6/ognl.jsp?para=hello

    1. 通过OGNL表达式获取属性范围中的值

        <br/>
        HTTP parameters para = <s:property value="#parameters.para" />
        <br/>
        request attribute para = <s:property value="#request.para" />
        <br/>
        session attribute para = <s:property value="#session.para" />
        <br/>
        application attribute para = <s:property value="#application.para" />
        <br/>
        attr attribute para = <s:property value="#attr.para" />
        <br/>
        <hr>

    输出:

    HTTP parameters para = hello
    request attribute para = request scope attribute
    session attribute para = session scope attribute
    application attribute para = aplication scope attribute
    attr attribute para = request scope attribute 

    2. 通过OGNL表达式创建list集合,并且遍历出集合中的值

        <br>
        <s:set name="list" value="{'eeeee','ddddd','ccccc','bbbbb','aaaaa'}"></s:set>
        <s:iterator value="#list" var="o">
            ${o}<br/>
            <!--<s:property />-->
        </s:iterator>
        <br/>
        <hr>

    输出:

    eeeee
    ddddd
    ccccc
    bbbbb
    aaaaa

    3. 通过OGNL表达式创建Map集合,并且遍历出集合中的值

        <br>
        <s:set name="map"
            value="#{'1':'eeeee','2':'ddddd','3':'ccccc','4':'bbbbb','5':'aaaaa'}"></s:set>
        <s:iterator value="#map" var="o">
            ${o.key}->${o.value}<br/>
            <!--    <s:property value="#o.key"/>-><s:property value="#o.value"/><br/>   -->
            <!--    <s:property value="key" />-><s:property value="value" /> -->
        </s:iterator>
        <br/>
        <hr>

    输出:

    1->eeeee
    2->ddddd
    3->ccccc
    4->bbbbb
    5->aaaaa

    4. 通过OGNL表达式,进行逻辑判断

        <br>
        <s:if test="'aaa' in {'aaa','bbb'}">
            aaa 在 集合{'aaa','bbb'}中;
        </s:if>
        <s:else>
            aaa 不在 集合{'aaa','bbb'}中;
        </s:else>
    
        <br/>
    
        <s:if test="#request.req not in #list">
            不 在 集合list中;
        </s:if>
        <s:else>
            在 集合list中;
        </s:else>
        <br/>
        <hr>

    输出:

    aaa 在 集合{'aaa','bbb'}中;
    不 在 集合list中;   

    5. 通过OGNL表达式的投影功能进行数据筛选

        <s:iterator value="#attr.listStudent.{?#this.id % 2 != 0}" var="cur">
            <s:property value="#cur.username"/>
        </s:iterator>
        <br/>
        <s:iterator value="#attr.listStudent.{^#this.id % 2 != 0}" var="cur">
            <s:property value="#cur.username"/>
        </s:iterator>
        <br/>
        <s:iterator value="#attr.listStudent.{$#this.id % 2 != 0}" var="cur">
            <s:property value="#cur.username"/>
        </s:iterator>
        <br/>
        <s:property value="#attr.listStudent.{username}[0]"/>
        <br/>
        <s:property value="#attr.listStudent.{$#this.id == 3}.{username}[0]"/>
        <br/>

    输出:

    张三   赵五    钱七    
    张三      
    钱七      
    张三  
    赵五 

    6. 通过OGNL表达式访问某个类的静态方法和值

        <br>
        <s:property value="@java.lang.Maths@floor(32.56)" />
        <br/>
        <hr>

    输出:

    32.0 

    7. OGNL表达式 迭代标签 详细

        <br>
        <s:set name="list2"
            value="{'aa','bb','cc','dd','ee','ff','gg','hh','ii','jj'}"></s:set>
        <table border="1">
            <tr>
                <td>
                    索引
                </td>
                <td></td>
                <td>
                    奇?
                </td>
                <td>
                    偶?
                </td>
                <td>
                    首?
                </td>
                <td>
                    尾?
                </td>
                <td>
                    当前迭代数量
                </td>
            </tr>
            <s:iterator value="#list2" var="o" status="s">
                <tr bgcolor="<s:if test="#s.even">pink</s:if>">
                    <td>
                        <s:property value="#s.getIndex()" />
                    </td>
                    <td>
                        <s:property />
                    </td>
                    <td>
                        <s:if test="#s.odd">Y</s:if>
                        <s:else>N</s:else>
                    </td>
                    <td>
                        <s:if test="#s.even">Y</s:if>
                        <s:else>N</s:else>
                    </td>
                    <td>
                        <s:if test="#s.first">Y</s:if>
                        <s:else>N</s:else>
                    </td>
                    <td>
                        <s:if test="#s.isLast()">Y</s:if>
                        <s:else>N</s:else>
                    </td>
                    <td>
                    <s:property value="#s.getCount()"/>
                </td>
                </tr>
            </s:iterator>
        </table>

    输出:

    8. 完整代码(ognl.jsp)

    <%@ page language="java" import="java.util.*,com.clzhang.ssh.demo6.Student" pageEncoding="utf-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <%
        request.setAttribute("para", "request scope attribute");
        request.getSession().setAttribute("para", "session scope attribute");
        request.getSession().getServletContext().setAttribute("para", "aplication scope attribute");
    
        List<Student> listStudent = new ArrayList<Student>();
        listStudent.add(new Student(1, "张三", new Date()));
        listStudent.add(new Student(2, "李四", new Date()));
        listStudent.add(new Student(3, "赵五", new Date()));
        listStudent.add(new Student(4, "孙六", new Date()));
        listStudent.add(new Student(5, "钱七", new Date()));
        pageContext.setAttribute("listStudent", listStudent);
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <body>
    1. 通过OGNL表达式获取属性范围中的值
        <br/>
        HTTP parameters para = <s:property value="#parameters.para" />
        <br/>
        request attribute para = <s:property value="#request.para" />
        <br/>
        session attribute para = <s:property value="#session.para" />
        <br/>
        application attribute para = <s:property value="#application.para" />
        <br/>
        attr attribute para = <s:property value="#attr.para" />
        <br/>
        <hr>
    
    2. 通过OGNL表达式创建list集合,并且遍历出集合中的值
        <br>
        <s:set name="list" value="{'eeeee','ddddd','ccccc','bbbbb','aaaaa'}"></s:set>
        <s:iterator value="#list" var="o">
            ${o}<br/>
            <!--<s:property />-->
        </s:iterator>
        <br/>
        <hr>
    3. 通过OGNL表达式创建Map集合,并且遍历出集合中的值
        <br>
        <s:set name="map"
            value="#{'1':'eeeee','2':'ddddd','3':'ccccc','4':'bbbbb','5':'aaaaa'}"></s:set>
        <s:iterator value="#map" var="o">
            ${o.key}->${o.value}<br/>
            <!--    <s:property value="#o.key"/>-><s:property value="#o.value"/><br/>   -->
            <!--    <s:property value="key" />-><s:property value="value" /> -->
        </s:iterator>
        <br/>
        <hr>
    4. 通过OGNL表达式,进行逻辑判断
        <br>
        <s:if test="'aaa' in {'aaa','bbb'}">
            aaa 在 集合{'aaa','bbb'}中;
        </s:if>
        <s:else>
            aaa 不在 集合{'aaa','bbb'}中;
        </s:else>
    
        <br/>
    
        <s:if test="#request.req not in #list">
            不 在 集合list中;
        </s:if>
        <s:else>
            在 集合list中;
        </s:else>
        <br/>
        <hr>
    5. 通过OGNL表达式的投影功能进行数据筛选
        <br>
        <s:iterator value="#attr.listStudent.{?#this.id % 2 != 0}" var="cur">
            <s:property value="#cur.username"/>
        </s:iterator>
        <br/>
        <s:iterator value="#attr.listStudent.{^#this.id % 2 != 0}" var="cur">
            <s:property value="#cur.username"/>
        </s:iterator>
        <br/>
        <s:iterator value="#attr.listStudent.{$#this.id % 2 != 0}" var="cur">
            <s:property value="#cur.username"/>
        </s:iterator>
        <br/>
        <s:property value="#attr.listStudent.{username}[0]"/>
        <br/>
        <s:property value="#attr.listStudent.{$#this.id == 3}.{username}[0]"/>
        <br/>
        <hr>
    6. 通过OGNL表达式访问某个类的静态方法和值
        <br>
        <s:property value="@java.lang.Math@floor(32.56)" />
        <br/>
        <hr>
    7. OGNL表达式 迭代标签 详细
        <br>
        <s:set name="list2"
            value="{'aa','bb','cc','dd','ee','ff','gg','hh','ii','jj'}"></s:set>
        <table border="1">
            <tr>
                <td>
                    索引
                </td>
                <td></td>
                <td>
                    奇?
                </td>
                <td>
                    偶?
                </td>
                <td>
                    首?
                </td>
                <td>
                    尾?
                </td>
                <td>
                    当前迭代数量
                </td>
            </tr>
            <s:iterator value="#list2" var="o" status="s">
                <tr bgcolor="<s:if test="#s.even">pink</s:if>">
                    <td>
                        <s:property value="#s.getIndex()" />
                    </td>
                    <td>
                        <s:property />
                    </td>
                    <td>
                        <s:if test="#s.odd">Y</s:if>
                        <s:else>N</s:else>
                    </td>
                    <td>
                        <s:if test="#s.even">Y</s:if>
                        <s:else>N</s:else>
                    </td>
                    <td>
                        <s:if test="#s.first">Y</s:if>
                        <s:else>N</s:else>
                    </td>
                    <td>
                        <s:if test="#s.isLast()">Y</s:if>
                        <s:else>N</s:else>
                    </td>
                    <td>
                    <s:property value="#s.getCount()"/>
                </td>
                </tr>
            </s:iterator>
        </table>
    </body>
    </html>
    View Code

    Student.java(只用到部分方法)

    package com.clzhang.ssh.demo6;
    
    import java.util.*;
    
    public class Student {
        private int id;
        private String username;
        private int grade;
        private Date birthday;
        
        //只要是重写一个类的构造方法,就必须要为这个类保留空的构造方法
        //因为框架默认的都会去调用无参的空的构造方法
        public Student(){};
        public Student(int id, String username, Date birthday) {
            this.id = id;
            this.username = username;
            this.birthday = birthday;
        }
        public Student(String username,int grade){
            this.username = username;
            this.grade = grade;
        }
        
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public int getGrade() {
            return grade;
        }
        public void setGrade(int grade) {
            this.grade = grade;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        
        @Override
        public String toString() {
            //如果不重写它的toString()方法的话,默认调用toString()将输出【类型+@+内存地址的哈希值】
            return "{学生姓名:" + username + ",成绩:" + grade + "}";
        }
    }
    View Code

    更多阅读参考:

    struts2中的OGNL表达式(转)

    struts2:遍历自定义字符串数组,遍历Action实例所引用对象中的数组

  • 相关阅读:
    BZOJ 1101: [POI2007]Zap [莫比乌斯反演]
    磁盘I/O高居不下,通过什么来查看占用I/O的进程?
    jmeter中特殊的时间处理方式
    Fiddler抓包工具版面认识(一)
    Jmeter 时间函数工具汇总
    Jmeter之__CSVRead随机读取变量
    jmeter配置元件之计数器
    Jmeter全局变量设置
    数据驱动和关键字驱动
    sqlmap工具命令行的含义
  • 原文地址:https://www.cnblogs.com/nayitian/p/3467557.html
Copyright © 2011-2022 走看看