struts2:ognl表达式

ognl

 

1,OGNL是ObjectGraphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts 2框架使用OGNL作为默认的表达式语言。

 

2,ognl与El不同的地方有:比如ognl可以支持对象方法的调用,静态方法的调用,对集合的投影等功能

 

3,Ognl 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了java.utils.Map接口,在Struts2中上下文(Context)的实现为ActionContext,下面是上下文(Context)的结构示意图

当struts2接收到请求的时候,会迅速的创建ActionContext, ValueStack, action , 然后会把Action放入到ValueStack中,所以action的实例变量就会被访问到了

 

 

4,ognl表达式要结合<s:property  value=””/>标签才能使用

     1,访问Action中的普通属性:<s:property value="username"/> | ${username }<br/>

     <!-- 访问parameters,request,session,application,attr的时候以#开头

        ,加上范围,但是如果访问的是值栈的话,那么不需要可以直接访问

      -->

     2,访问URL中的参数: <s:property value="#parameters.username"/><br/>

     3,访问request中的属性:<s:property value="#request.sex2"/><br/>

     

     4,访问Action中的对象的属性:<s:property value="person.id"/>||<s:property value="person.name"/><br/>

     5,访问Action中对象中对象的属性:<s:property value="person.friend.dname"/><br/>

     6,访问Action中的普通方法:<s:property value="greeting()"/><br/>

     7,访问Action中的对象的普通方法:<s:property value="person.sayHello()"/><br/>

     <!-- 如果要访问静态的方法,需要在strut中设置一个常量:struts.ognl.allowStaticMethodAccesstrue 访问的方法为@全类名@方法名()-->

     8,访问Action中的静态方法:<s:property value="@hwt.action.OgnlAction@staticMethod()"/> <br/>

     9,访问其他对象的静态方法:<s:property value="@hwt.service.OgnlService@getDname()"/><br/>

     10,访问其他对象的静态方法返回的对象的属性:<s:property value="@hwt.service.OgnlService@getDog().dname"/><br/>

     <!-- 要将静态的属性设置为public -->

     11,访问静态的属性:<s:property value="@hwt.service.OgnlService@str"/><br/>

     12,访问Math的方法:<s:property value="@@max(2,3)"/>  <br/>

 

     -------------------------------<br/>

     <!-- 需要注意的是在ognl表达式中,{}代表的是一个集合 -->      

     13,访问list:<br/>

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

        list中的一个对象:<s:property value="list[0]"/><br/>

        list中某个属性的集合:<s:property value="list.{dname}"/><br/>

        list中的一个对象的属性:<s:property value="list[0].dname"/><br/>

        循环list:<s:iterator value="list"var="l">

                    <s:property value="#l.dname"/>

                </s:iterator><br/>

                <s:iterator value="strs" var="s"status="st">

                    <font color=<s:if test="#st.odd">red</s:if><s:else>black</s:else>><s:property value="#st.index"/>,<s:property value="s"/></font>

                </s:iterator><br/>

     -------------------------------<br/>

     set集合和list集合一样的<br/>

     -------------------------------<br/>

     14,map集合:<br/>

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

        map中某一个对象:<s:property value="map.key1"/><br/>

        map中所有的key:<s:property value="map.keys"/><br/>

        map中所有的值:<s:property value="map.values"/><br/>

        循环map:<s:iterator value="map" status="s">

                    <s:property value="key"/>-<s:property value="value"/>

                </s:iterator><br/>

     15,集合的个数:<br/><s:property value="map.size()"/>

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

     

   

    <br/>---------------<br/>  

    16,投影:

    <!-- -只循环年龄=5的所有对象的名字 ,投影中:#this表示每次循环到的对象

    ?表示要筛选的条件

    ^表示满足后面条件的第一个

    $表示满足后面条件的最后一个

-->

<s:iterator value="list.{?#this.age==5}”>

                    <s:property value="dname"/>

            </s:iterator><br/>

            <s:iterator value="list.{^#this.age>5}">

                    <s:property value="dname"/>

            </s:iterator><br/>

            <s:iterator value="list.{$#this.age>5}">

                    <s:property value="dname"/>

            </s:iterator><br/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值