二十二、OGNL的一些其他操作

二十二、OGNL的一些其他操作

  1. 投影

    ?判断满足条件

    动作类代码: ^ $

     

    public class Demo2Action extends ActionSupport {

        public Demo2Action() {

            System.out.println("实例化了");

        }

     

        private List<Person> persons = new ArrayList<Person>();

     

        public List<Person> getPersons() {

            return persons;

        }

     

        public void setPersons(List<Person> persons) {

            this.persons = persons;

        }

     

        public String execute() {

            // 初始化几个人

            persons.add(new Person("wdx", 18));

            persons.add(new Person("wd", 28));

            persons.add(new Person("cxy", 38));

            return SUCCESS;

        }

    }

     

    Jsp代码:

    <!-- person.{?#this.age>20}针对集合persons的每一个对象的age属性如果大于20,则输出 -->

        <!--会用pkey ,当前遍历的元素为value,放到contextMap -->

        <s:iterator value="persons.{?#this.age>20}" var="p">

            <s:property value="#p.username"/>

            <s:property value="#p.age"/>

        </s:iterator>

        <hr/>

        <!-- persons.{username} 这个集合已经改变了,[wdx, wd, cxy],因此变量指向的是一个String字符串 -->

        <!--会用pkey ,当前遍历的元素为value,放到contextMap -->

        <s:iterator value="persons.{username}" var="p">

            <s:property value="#p"/>

        </s:iterator>

        <s:debug></s:debug>

     

  2. 创建集合对象

    <s:iterator value="{'aa','bb','cc'}" var="s">

            <s:property value="#s" /><br/>

    </s:iterator>

        <br/>----利用OGNL表达式创建一个Map---<br/>

        

    <s:iterator value="#{'a':'aa', 'b':'bb','c':'cc'}}" var="me">

            <s:property value="#me.key"/>=<s:property value="#me.value"/>

    </s:iterator>

    <s:debug></s:debug>

     

  3. OGNL中的%{}操作符的用法

    作用:把普通字符串当做OGNL表达式来用

    <%

            Person p = new Person("王雪",19);

            ActionContext.getContext().getValueStack().push(p);

        %>

        <!-- UI标签中的lable属性的取值,不是一个OGNL表达式,如果要把一个普通字符串当做OGNL表达式,请使用%{} -->

        <s:textfield name="uname" label="%{username}"></s:textfield>

        <s:debug></s:debug>

     

     

    知识:把OGNL表达式当做普通字符串对待,请使用单引号或双引号

  4. OGNL中的$用法
  • 在struts.xml配置文件和国际化消息资源文件中,使用OGNL,放在${}中

以下是在配置文件中使用OGNL表达式

<param name="contentDisposition">attachment;filename=${@java.net.URLEncoder@encode(fileName,"UTF-8")}</param>

  • JSP中使用${}

 

EL表达式还是原有功能,如果在域范围中找不到,{}内部的东西就变成了OGNL表达式。

原文地址:https://www.cnblogs.com/Prozhu/p/5886534.html