struts2:OGNL表达式之#、%、$符号运用

时间:2022-01-17 08:58:00

1. OGNL表达达符号"#"

1.1 #用于访问OGNL上下文和Action上下文,#相当于ActionContext.getContext()

注意:当系统创建了Action实例后,被保存到Value Stack中,无需书写“#“符号即可访问Action的属性:

struts2:OGNL表达式之#、%、$符号运用

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

struts2:OGNL表达式之#、%、$符号运用

说明:

  • 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表达式之#、%、$符号运用的更多相关文章

  1. struts2 OGNL表达式

    一.OGNL OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对 ...

  2. Struts2 OGNL表达式、ValueStack

    OGNL简介 OGNL,即Object-Graph Navigation Language,对象视图导航语言,是一种数据访问语言,比EL表达式更加强大: EL只能从11个内置对象中取值,且只能获取属性 ...

  3. struts2 OGNL 表达式

    一.Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言:JSTL(JSP Standard ...

  4. struts2 ognl表达式访问值栈

    1:简单的说,值栈是对应每一个请求对象的轻量级的数据存储中心,在这里统一管理着数据,供Action.Result.Interceptor等Struts2的其他部分使用,这样数据被集中管理起来而不凌乱. ...

  5. 使用OGNL表达式

    OGNL表达式(#号的用法) 用法1:访问OGNL上下文和Action上下文,#相当于ActionContext.getContext() 1.如果访问其他Context中的对象,由于他们不是根对象, ...

  6. struts2中使用ognl表达式时各种符号的使用规则&dollar;&comma;&num;&comma;&percnt;

    OGNL表达式struts2标签“%,#,$” 一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一 ...

  7. Struts2的OGNL表达式语言

    一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...

  8. OGNL表达式struts2标签&OpenCurlyDoubleQuote;&percnt;,&num;,&dollar;”

    一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一种可以方便地操作对象属性的开源表达式语言.OGN ...

  9. JSTL标签&comma;EL表达式&comma;OGNL表达式,struts2标签 汇总

    一下纯属个人总结摘抄,总结一起方便查看,解决疑问,有遗漏或错误,还请指出.       1,JSTL标签总结: a).JSTL标签有什么用?          JSTL是由JCP(Java Commu ...

随机推荐

  1. expected an indented block

    expected an indented block 在初步使用Python的时候遇到了" expected an indented block"报错信息,查询相关的博客得知是因为 ...

  2. 一年成为emacs高手

    http://blog.csdn.net/redguardtoo/article/details/7222501

  3. svn各个图标代表什么意思

    最近参与公司项目开发要使用SVN,下面随笔记下在使用SVN中常见的图标各代表什么意思 灰色向右箭头:本地修改过 ,本地代码没有及时上库.灰色向右且中间有个加号的箭头:本地比SVN上多出的文件灰色向右且 ...

  4. Eclipse C&plus;&plus;开发环境配置&lpar;很简洁&rpar;

    from: https://www.zybuluo.com/ghostfn1/note/303921

  5. 《Linux内核分析》第六周 读书笔记

    <Linux内核设计与实现>CHAPTER3阅读梳理 [学习时间:3hours] [学习内容:进程的描述:进程的生命周期(包括创建.终结)] 一.进程(任务)描述 1.进程是处于执行期的程 ...

  6. HTML5 localStorage and sessionStorage

    转载至:http://blog.csdn.net/fdipzone/article/details/25517615 HTML5 提供两种web存储方法,localStorage 与 sessionS ...

  7. oracle11 客户端安装及PLSQL和TOAD中文乱码

    oracle11 客户端安装及PLSQL和TOAD中文乱码 1.从Oracle官方下载“Instant Client Package”的软件,较好的实现了Oracle客户端绿化的解决方案. 下载地址为 ...

  8. 启动程序的c&plus;&plus;方法

    #include <Windows.h> void main() { WinExec( "notepad.exe fitdata.txt", SW_SHOW ); // ...

  9. sql server 2008 &lpar;3&rpar;

    数据库表常用术语 关系--即二维表.每个关系都有个关系名,就是表名 域:取值范围 记录--行 字段,属性--列 关联--指哪个数据库表之间的数据彼此联系的方式 关键字:属性或属性的组合,可以唯一标识一 ...

  10. Docker&colon; Jenkins与Docker的自动化CI&sol;CD流水线实战

    什么是CI/CD 持续集成(Continuous Integration,CI):代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈.持续部署(Continuous Deployme ...