• OGNL 对象视图导航语言


    Object Graphics Navigate Language

    类似于EL(Expression Language)表达式,

    可以帮助我们在配置文件、JSP中来获取对象的值

    这门语言比EL功能更强,体现在运算,还可以做一些对

    数据的条件筛选

    在获取普通属性和调用普通方法的时候,在每一个值的前面

    实际上有一个this对象,这个this对象就是处理这个请求的

    action的对象(不是单例模式)

    //循环    value="要循环的集合"

    <s:iterator var="p" value="list">

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

    </s:iterator>

    //逻辑判断

    <s:if test="num <= 10">

    小于等于10

    </s:if>

    <s:else if test="num <= 5">

    小于等于5

    </s:else if>

    <s:else>

    其他情况

    </s:else>

    Action取得普通属性的值:

    <s:property value="username" />

    Action取得对象的普通属性的值:

    <s:property value="users.name" />

    Action取得对象的普通属性的值:

    <s:property value="users.dog.type.toUpperCase()" />

    调用Action的普通方法:

    <s:property value="sum(1,2)" />

    调用Action对象的普通方法:

    <s:property value="users.sum(1,3)" />

    调用Action对象的普通方法:

    <s:property value="users.dog.sum(1,3)" />

    开启静态访问开关

    struts.xml中增加一个常量的配置

    <constant name="struts.ognl.allowStaticMethodAccess"value="true"></constant>                                                        

    得到Action的静态属性:

    //<s:property value="@包名.类名@属性" />

    <s:property value="@action.OgnlAction@PI" />

    得到Action的静态方法:

    //<s:proerty value="@包名.类名@方法名(参数)"/>

    <s:property value="@action.OgnlAction@sum(2.1,3.1)" />

    调用Action对象的静态属性:

    <s:property value="@entity.Users@PI" />

    调用Action对象的静态属性:

    <s:property value="@entity.Users@sum(2.1,3)" />

    调用默认类(Math)静态方法:

    <s:property value="@java.lang.Math@max(3,4)" />

    调用Action的构造方法:

    <s:property value="new action.OgnlAction()" />

    调用Action的构造方法:

    <s:property value="new action.OgnlAction('tom').sum(3,4)" />

    调用Action对象的构造方法:

    <s:property value="new entity.Users().sum(4,5)" />

    得到list集合:

    <s:property value="list" />

    得到list集合某个元素:

    <s:property value="list[0]" />

    得到list集合中的某个元素的属性的值:

    <s:property value="list[0].name" />

    得到list集合中的某个元素的属性的值:

    <s:property value="list[0].dog.type" />

    得到list集合中元素的某一个属性的集合:

    <s:property value="list.{name}[0]" />

    得到list集合中元素的属性的集合:

    <s:property value="list.{dog}.{type}[0]" />

    得到list集合长度:

    <s:property value="list.size()" />

    得到set集合:

    <s:property value="set" />

    得到set集合某个元素:

    <s:property value="set.iterator().next()" />

    得到set集合中的属性的集合:

    <s:property value="set.{name}[0]" />

    得到set集合中的属性的集合:

    <s:property value="set.{dog}.{type}[0]" />

    得到set集合长度:

    <s:property value="set.size()" />

    得到map集合:

    <s:property value="map" />

    得到map集合中某个元素:

    //<s:property value="map['key']" />

    <s:property value="map['u1']" />

    得到map集合中所有的key:

    <s:property value="map.keys" />

    得到map集合中所有的value:

    <s:property value="map.values" />

    得到map集合长度:

    <s:property value="map.size()" />

    OGNL中的条件筛选

    1、所有的条件都封装在{}

    2、利用条件筛选出来结果后,有可能并非全部都需要

    可以通过这三个字符获取你想要的结果

    ?所有的、^取第一个(异或符号)$取最后一个

    3#this表示的并非是“.”前面那个集合对象,

    而是前面那个集合里面的某一个元素

    带条件的集合(?--所有):

    <s:property value="list.{?#this.id>=1002}" />

    带条件的集合($--最后):

    <s:property value="list.{$#this.id>=1002}" />

    带条件的集合(^--首个):

    <s:property value="list.{^#this.id>=1002}" />

    带条件的集合(?--所有):

    <s:property value="list.{?#this.id>=1002 and #this.name.length()>4}" />

    带条件的集合(?--所有):

    <s:property value="list.{?#this.id>=1002}

    .{dog}.{?!(#this.type.length()>4)}[0].type" />

     

     

    ===================集合操作==========================

    <fieldset>

            <legend>LIST操作</legend>

            <s:property value="list[1].getPname()" />

            <br>

            <s:property value="list.{dog}.{dname}[1]" />

            <s:property value="list.{dog.dname}[1]" />

        </fieldset>

        <fieldset>

            <legend>SET操作</legend>

            <s:property value="set.iterator().next().pname" />

        </fieldset>

     

        <fieldset>

            <legend>MAP操作</legend>

            <s:property value="map['a']" />

            <br>

            <s:property value="map.values" />

        </fieldset>

     

        <fieldset>

            <legend>条件筛选</legend>

            <s:property value="list.{$#this.age>=18}.{pname}" />

            <br>

            <!-- 获取所有年满18岁,并且他们的狗的年龄大于等于2岁 -->

            <s:property value="list.{?#this.age>=18 and #this.dog.age>=2}.{pname}" />

            <s:property value="list.{?#this.age>=18}.{dog}.{?#this.age>=2}.{dname}" />

        </fieldset>

  • 相关阅读:
    JavaEE基础(01):Servlet实现方式,生命周期执行过程
    Spring 框架基础(06):Mvc架构模式简介,执行流程详解
    Spring 框架基础(05):事务管理机制,和实现方式
    多线程搜索与排序
    mybatis的Mapper代理原理
    spring的RestTemplate使用指南
    探索CAS无锁技术
    两年Java的面试经验
    HashMap多线程并发的问题
    解析Mybaits的insert方法返回数字-2147482646的原因
  • 原文地址:https://www.cnblogs.com/shaohaixiong/p/4603240.html
Copyright © 2020-2023  润新知