struts2:OGNL表达式之#、%、$符号运用
1. OGNL表达达符号"#"
1.1 #用于访问OGNL上下文和Action上下文,#相当于ActionContext.getContext()
注意:当系统创建了Action实例后,被保存到Value Stack中,无需书写“#“符号即可访问Action的属性:

另外,struts提供了一些命名对象,这些对象与根对象无关它们只是存在于Stack Context中。访问这些对象需要“#“符号指明:

说明:
- parameters对象:用于访问HTTP请求参数。例如:#parameters.username、#parameters['username'],等同于:request.getParameter("username")。
- request对象:用于访问HttpServletReques对象的属性。例如:#request.foo、#request['foo'],等同于:request.getAttribute("foo")。
- session对象:用于访问HttpSession对象的属性。例如:#session.foo、#session['foo']、等同于:session.getAttribute("foo")。
- application对象:用于访问ServletContext对象的属性。例如:#application.foo、#application['foo'],等同于调用ServletContext的getAttribute("foo")。
- attr对象:用于按request -> session -> application顺序访问其属性(attribute)。例如:#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止。
1.2 用于过滤和投影(projecting)集合
- ?——所有匹配选择逻辑的元素
- ^——只提取符合选择逻辑的第一个元素
- $——只提取符合选择逻辑的最后一个元素
例如,通过ognl表达式的投影功能进行数据筛选,数据生成:
<%
List<Student> listStudent = new ArrayList<Student>();
listStudent.add(new Student(1, "张三", new Date()));
listStudent.add(new Student(2, "李四", new Date()));
listStudent.add(new Student(3, "赵五", new Date()));
listStudent.add(new Student(4, "孙六", new Date()));
listStudent.add(new Student(5, "钱七", new Date()));
pageContext.setAttribute("listStudent", listStudent);
%>
数据使用:
<br>
<s:iterator value="#attr.listStudent.{?#this.id % 2 != 0}" var="cur">
<s:property value="#cur.username"/>
</s:iterator>
<br/>
<s:iterator value="#attr.listStudent.{^#this.id % 2 != 0}" var="cur">
<s:property value="#cur.username"/>
</s:iterator>
<br/>
<s:iterator value="#attr.listStudent.{$#this.id % 2 != 0}" var="cur">
<s:property value="#cur.username"/>
</s:iterator>
<br/>
<s:property value="#attr.listStudent.{username}[0]"/>
<br/>
<s:property value="#attr.listStudent.{$#this.id == 3}.{username}[0]"/>
输出为:
张三 赵五 钱七
张三
钱七
张三
赵五
1.3 构造Map
例如:通过ognl表达式创建Map集合,并且遍历出集合中的值
<s:set name="map"
value="#{'1':'eeeee','2':'ddddd','3':'ccccc','4':'bbbbb','5':'aaaaa'}"></s:set>
<s:iterator value="#map" var="o">
${o.key }->${o.value }<br/>
<!-- <s:property value="#o.key"/>-><s:property value="#o.value"/><br/> -->
<!-- <s:property value="key" />-><s:property value="value" /> -->
</s:iterator>
输出为:
1->eeeee
2->ddddd
3->ccccc
4->bbbbb
5->aaaaa
2. %的用法
struts2中“%{}”符号的作用是指出其内部是一个ognl表达式。例如:
<s:textfield lable="user" name="user" value="%{#session.user}" />
不过有些标签默认认定,整个字符串就是一个表达式,所以不用%{} ,例如:
<s:property value="#session.user" />
在非struts2标签中,是不能用%{}的,但是可以使用EL表达式,例如:
<input name="user" value="${session.user}" />
// 下面是嵌套用法
<input name="user" value="<s:property value='#session.user' />" />
注意:不能在struts2标签中的字符串中,再次嵌套struts2标签;也不能在struts2标签中用EL表达式。例如:
// 错误一
<s:textfield lable="user" name="user" value="<s:property value='#session.user' />" />
// 错误二
<s:textfield lable="user" name="user" value="${session.user}" />
3. $的用法
3.1 用于在国际化资源文件中,引用OGNL表达式
参考:struts2:国际化
3.2 在struts2配置文件中引用OGNL表达式
例如,早期的示范代码中,有如下片段:
<action name="login" class="com.clzhang.ssh.demo1.LoginAction">
<result name="input">/ssh/demo1/login.jsp</result>
<result name="error">/ssh/demo1/wrong.jsp</result>
<result name="list" type="redirectAction">
<param name="idInList">${id}</param>
<param name="actionName">listBook</param>
</result>
</action>
本文参考:
http://www.docin.com/p-339114913.html
http://www.cnblogs.com/xly1208/archive/2011/11/19/2255500.html
struts2:OGNL表达式之#、%、$符号运用的更多相关文章
- struts2 OGNL表达式
一.OGNL OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对 ...
- Struts2 OGNL表达式、ValueStack
OGNL简介 OGNL,即Object-Graph Navigation Language,对象视图导航语言,是一种数据访问语言,比EL表达式更加强大: EL只能从11个内置对象中取值,且只能获取属性 ...
- struts2 OGNL 表达式
一.Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言:JSTL(JSP Standard ...
- struts2 ognl表达式访问值栈
1:简单的说,值栈是对应每一个请求对象的轻量级的数据存储中心,在这里统一管理着数据,供Action.Result.Interceptor等Struts2的其他部分使用,这样数据被集中管理起来而不凌乱. ...
- 使用OGNL表达式
OGNL表达式(#号的用法) 用法1:访问OGNL上下文和Action上下文,#相当于ActionContext.getContext() 1.如果访问其他Context中的对象,由于他们不是根对象, ...
- struts2中使用ognl表达式时各种符号的使用规则$,#,%
OGNL表达式struts2标签“%,#,$” 一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一 ...
- Struts2的OGNL表达式语言
一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...
- OGNL表达式struts2标签“%,#,$”
一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一种可以方便地操作对象属性的开源表达式语言.OGN ...
- JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总
一下纯属个人总结摘抄,总结一起方便查看,解决疑问,有遗漏或错误,还请指出. 1,JSTL标签总结: a).JSTL标签有什么用? JSTL是由JCP(Java Commu ...
随机推荐
- 腾讯云ubuntu搭建tomcat
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6377945.html 一:工具准备 Putty+Xftp5,见上一篇博文:http://www.cnblogs ...
- 【shell】shell基础脚本合集
1.向脚本传递参数 #!/bin/bash #功能:打印文件名与输入参数 #作者:OLIVER echo $0 #打印文件名 echo $1 #打印输入参数 执行结果: 2.在脚本中使用参数 #!/b ...
- Docker修改默认存储位置(转)
方法一.软链接 默认情况下Docker的存放位置为:/var/lib/docker 可以通过下面命令查看具体位置: sudo docker info | grep "Docker Root ...
- Linux软硬连接
曾经对软硬连接一直搞不明白,关键是怕操作错误. 硬链接不能跨区实现连接,硬链接是对原始文件的镜像,同一个inode,软连接是快捷方式,inode保存的是快捷方式的.原始文件删除,导致软连接文件无效. ...
- 安装win和xp双系统 若干问题
装了winxp和linux双系统,后先在winxp下手动格式化了linux系统,后启动时提示grub错误,重新分区后系统也 2010-09-17 21:07 [清风剑] | 分类:Linux | 浏览 ...
- Ubuntu12.04安装并配置Sublime Text 2
Ubuntu是个好系统,Sublime Text 是个好编辑器. 下载&安装 个人习惯喜欢到官网下载软件,http://www.sublimetext.com/2 选择合适的包下载回来的格式是 ...
- 【linux】linux 环境下 安装禅道(转载) -- 跟web服务器无关,无视apache、nginx!!!
下载地址:http://www.zentao.net/download/zentao10.0.beta-80076.html 参考文章 链接 :https://blog.csdn.net/xinxin ...
- Android中使用DialogFragment来取代popopwindow
DialogFragment +fragment 来取代popopwindow +fragment 先留个标题,这几天过来写,重大发现
- java struts2入门学习实例--使用struts进行验证
一.为什么要进行验证? 验证几乎是注册登录的必须前提,验证的主要作用有两点: 1.安全性 2.对用户提供差异化服务. 二.如何验证? ActionSupport类中有一个validate()方法,这是 ...
- iOS控制器生命周期
//view加载完毕就会自动调用 - (void)viewDidLoad; //view即将显示到window上 - (void)viewWillAppear:(BOOL)animated ; //v ...