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>

 

 

你可能感兴趣的:(Ognl)