struts2中使用ognl表达式时各种符号的使用规则$,#,%
- 一、什么是OGNL,有什么特点?
- OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言。是一种可以方便地操作对象属性的开源表达式语言。OGNL有如下特点:
- 、支持对象方法调用,形式如:objName.methodName();
- 、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名 | 值名],例如:
- @java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;
- 、支持赋值操作和表达式串联,例如:
- price=, discount=;
- 、访问OGNL上下文(OGNL context)和ActionContext;
- 、操作集合对象。
- 二、使用OGNL表达式
- OGNL要结合struts标签来使用。由于比较灵活,也容易把人给弄晕,尤其是“%”、“#”、“$”这三个符号的使用。由于$广泛应用于EL中,这里重点写%和#符号的用法。
- 、“#”符号有三种用途:
- ()、访问非根对象(struts中值栈为根对象)如OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:
- 名称
- 作用
- 例子
- parameters
- 包含当前HTTP请求参数的Map
- #parameters.id[]作用相当于request.getParameter("id")
- request
- 包含当前HttpServletRequest的属性(attribute)的Map
- #request.userName相当于request.getAttribute("userName")
- session
- 包含当前HttpSession的属性(attribute)的Map
- #session.userName相当于session.getAttribute("userName")
- application
- 包含当前应用的ServletContext的属性(attribute)的Map
- #application.userName相当于application.getAttribute("userName")
- 注:attr 用于按request > session > application顺序访问其属性(attribute),#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止。用于过滤和投影(projecting)集合,如books.{?#};构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
- ()、用于过滤和投影(projecting)集合,如: books.{?#}
- books.{?#}
- ()、构造Map,如: #{'foo1':'bar1', 'foo2':'bar2'}
- #{'foo1':'bar1', 'foo2':'bar2'}这种方式常用在给radio或select、checkbox等标签赋值上。如果要在页面中取一个map的值可以这样写:
- <s:property value="#myMap['foo1']"/>
- <s:property value="#myMap['foo1']"/>
- 、“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
- 这是一开始最让我不能理解的符号,原因是一些相关资源在表述时不太准备,经过一翻痛苦的探索,终于明白了它的用途。实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。很有点类似javascript里面的eval_r()功能,例如 :
- var oDiv = eval_r("document.all.div"+index)
- var oDiv = eval_r("document.all.div"+index)
- 当index变量为时,语句就会被当作var oDiv = document.all.div1 var oDiv = document.all.div1来执行。%{}就是起这个作用。举例:
- <s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
- <s:property value="#myMap['key1']"/>
- <s:url value="#myMap['key1']" />
- <s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
- <s:property value="#myMap['key1']"/>
- <s:url value="#myMap['key1']"/>
- 上面的代码第行会在页面上输出“value1”,而第行则会输出行改写成这样:
- <s:url value="%{#myMap['key1']}"/>
- <s:url value="%{#myMap['key1']}"/>
- 则输出为“value1”。
- 这说明struts2里不同的标签对ognl的表达式的理解是不一样的。如果当有的标签“看不懂”类似“#myMap['key1']”的语句时,就要用%{}来把这括进去,“翻译”一下了。
- 、“$”有两种用途
- ()、在国际化资源文件中,引用OGNL表达式。
- ()、在Struts 配置文件中,引用OGNL表达式:
- <action name="saveUser" class="userAction" method="save">
- <result type="redirect">listUser.action?msg=${msg}</result>
- </action>
- <action name="saveUser" class="userAction" method="save">
- <result type="redirect">listUser.action?msg=${msg}</result>
- </action>
struts2中使用ognl表达式时各种符号的使用规则$,#,%的更多相关文章
- Struts2中的OGNL表达式
一.OGNL表达式简介 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目.所谓对象图,即以任意一个对象为根,通过OGNL可以访问 ...
- (补充)9.Struts2中的OGNL表达式
OGNL表达式概述 1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写 * 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关 ...
- 2018.11.24 struts2中的OGNL表达式及两者的结合
OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航. OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 理解图示 使用OGNL准备工 ...
- Struts2中使用OGNL表达式语言访问静态方法和静态属性
1.一定要在struts.xml配置文件中配置允许使用OGNL访问静态方法,否则不能使用OGNL访问静态方法 2.<s:property value="@com.gk.StaticTe ...
- [转]STRUTS2中的OGNL
OGNL表达式是(Object-Graph Navigation Language)是对象图形化导航语言.OGNL是一个开源的项目,struts2中默认使用OGNL表达式语言来显示数据.与serlve ...
- 在Struts2框架中使用OGNL表达式(在jsp页面中使用OGNL表达式)
1. Struts2引入了OGNL表达式,主要是在JSP页面中获取值栈中的值 2. 具体在Struts2中怎么使用呢?如下步骤 * 需要先引入Struts2的标签库(在JSP页面的最上面位置) > ...
- struts2框架之OGNL表达式概述(在代码中使用OGNL表达式)
1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写 * 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其它对象 * 通 ...
- struts2中的OGNL详解
先了解一下OGNL的概念 OGNL的全名称Object Graph Navigation Language.全称为对象图导航语言,是一种表达式语言.使用这种表达式语言,你可以通过某种表达式语法,存取J ...
- 浅析Struts2中的OGNL和ValueStack
要了解Struts2与OGNL表达式的关系,我们必须先搞清楚以下三个概念: 1. ActionContext它是Action运行的上下文环境,Action的多项设置都存放在次,我们每一次Action ...
随机推荐
- 学习java的视频资源(尚学堂)(比较老旧,但是还是挺好用)
本人新手,转入IT,一开始在学校的时候看过尚学堂 马士兵讲过的java基础视频教程,这次深入学习呢,就从百度云盘找了一整套的视频资源.之后越深入的学习呢,发现这些视频资源VeryCD上都发布了,地址 ...
- C++中的操作符重载
一.什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”.说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载.运算符重载和函数重载的不同之处在于操作符重载 ...
- sfs
http://tieba.baidu.com/p/3397811202 http://mooc.guokr.com/post/610664/ http://home.ustc.edu.cn/~boj/ ...
- oracle distinct 去除重复,同时按某字段排序
SELECT distinct supplier_id, min(evidence_date) as evidence_date FROM TD_SUPPLIER_EVIDENCE_INFO wher ...
- Recall(召回率);Precision(准确率);F1-Meature(综合评价指标);true positives;false positives;false negatives.
Recall(召回率);Precision(准确率);F1-Meature(综合评价指标);在信息检索(如搜索引擎).自然语言处理和检测分类中经常会使用这些参数. Precision:被检测出来的信息 ...
- ASP.net MVC3里的HandleErrorAttribute
在MVC3里使用HandleErrorAttribte类,有2种方式可以使用它,一是在类或者方法上直接使用HandleError属性来定义: // 在这里声明[HandleError]public c ...
- WampServer下如何实现多域名配置
原文:WampServer下如何实现多域名配置 之前在学习跨域的时候,我写过一篇叫做WampServer下使用多端口访问的文章,默认的 localhost 采用的是 80 端口,能使用多端口访问的核心 ...
- SQL Server 中@@IDENTITY的用法
原文地址:http://www.studyofnet.com/news/145.html 本文导读:@@IDENTITY是返回上次插入的标识值,标识值一般指的是自动增长值.但是如果想只返回插入到当前作 ...
- 经典排序算法(Java实现)
以下程序均将数据封装于DataWrap数据包装类中,如下所示: //数据包装类 class DataWrap implements Comparable<DataWrap> { int d ...
- JenKins 环境搭建 for Centos6.5
1,JenKines简单介绍--图解