OGNL中$、%、#、{}、^、$ 标签的使用简介

来源:互联网 发布:淘宝虚拟自动发货软件 编辑:程序博客网 时间:2024/04/29 05:41

1. Struts2中将ActionContext作为OGNL的上下文环境(ActionContext内部含有一个Map对象)
2. Struts2中的OGNL表达式语言的根对象是一个ValueStack,ValueStack中的每一个对象都被视为根对象。
Struts2框架将实例化的Action对象放入ValueStack中,如果是Action链,则多个Action都存在于ValueStack中。而ValueStack中除了Action外,Struts2框架还将parameters,request,response,session,application,attr等对象放到ActionContext中,访问这些对象需要加前缀#。
哈哈

  • OGNL中 $ 号的使用
1..在国际化资源文件中,引用OGNL表达式2..在struts.xml文件中,引用OGNL表达式
  • OGNL中%号的使用

“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
这个类似js中的eval,很暴力。
1..使用%{}可以取出保存在值堆栈中的Action对象,直接调用它的方法
2..如果Action继承了ActionSupport,那么在页面标签中可以使用%{getText(‘key’)}获取国际化信息

  • OGNL中#号的使用

    OGNL中的#号可以取出堆栈上下文中存放的对象
    这里写图片描述

    “#”符号的用途一般有三种:

    — 、访问非根对象属性,例如#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(“msg”) 。
    二、用于过滤和投影(projecting)集合,如persons.{?#this.age>25},persons.{?#this.name==’pla1’}.{age}[0]。
    三、用来构造Map,例如示例中的#{‘foo1’:’bar1’, ‘foo2’:’bar2’}。
    利用投影获取属性
    利用投影获取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
    另符两语法:
    使用Top语法获取值栈中的第二个对象的属性:
    使用N语法获取值栈中的第二个对象的属性:

0 0
原创粉丝点击