美文网首页
Struts2中的OGNL表达式(续)

Struts2中的OGNL表达式(续)

作者: FTOLsXD | 来源:发表于2017-02-17 16:20 被阅读18次

    利用投影获取属性

    利用投影获取List中对象的username属性时,其中{}表示的是一个集合.stus.{username}就表示将suts中所有的username属性取出组成一个新的列表

    利用选择获取属性

    OGNL表达式是很灵活的,可以同时使用选择技术与投影技术获取属性.
    使用选择技术时,#this代表当前元素,问号?是把所有满足条件的元素都取出来.
    上箭头是开始的意思,所以stus.{#this.grade>=60}.{username}输出的是[张三].
    注意,此时输出文本中包含中括号,这表示它是一个列表,而stus.{?#this.grade>=60}.{username}[0]输出的是张三,是字符串,二者是不同的.
    美元符号$是结束的意思,所以stus.{$#this.grade>=60}.{username}输出的是[王五]
    这三个符合:问号、上箭头、美元符所返回的都是List.

    补充

    1.当OGNL取不到值的时候,它不会报错,而是什么都不显示.

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

    返回的是ValueStack中从上至下的所有的Object.

        <s:property value="[1]"/>
    

    返回的是ValueStack中从上至下的第二个Object.

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

    返回的是成员变量username的值.假设ValueStack中存在两个Action的话,如果第一个Action如果没有username变量,那么它会继续找第二个Action。那么在什么情况下ValueStack中会存在两个Action呢? 答案是在struts.xml中配置的是从一个Action通过

    <result type="chain">
    

    跳转到另一个Action时。

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

    在Struts2.1.6中必须设置struts.ognl.allowStaticMethodAccess为true之后,才允许使用OGNL访问静态方法。而在Struts2.0.11则无需设置,即可直接访问.

    相关文章

      网友评论

          本文标题:Struts2中的OGNL表达式(续)

          本文链接:https://www.haomeiwen.com/subject/pnllwttx.html