OGNL和Struts2标签

你使用过的OGNL

  页面获取并输出Action属性<s:property value="userName"/>

  页面中获取request保存的数据<s:property value="#request.loginAccess "/>

OGNL是什么

  Object Graph Navigation Language ,对象图导航语言

  是Struts2默认的表达式语言,开源,功能更强大

  存取对象的属性、调用对象的方法;访问静态方法和属性

  访问值栈以及Stack Context

  操作集合对象

  支持赋值、运算操作、字段类型转化等

OGNL访问值栈

  通过<s:property value=“house.title”/>为什么可以获取到房屋的标题信息?

  通过<s:property value=“house.title”/>为什么可以获取到房屋的标题信息?

  house为Action的属性,Action的实例放在值栈(Value Stack)中

  OGNL可以直接访问值栈中的值

值栈(Value Stack)

  存放数据的内存空间

  值栈中存放了Action的实例

  如:可以通过OGNL来访问Action实例中的属性值

OGNL访问Stack Context

为什么通过 <s:property value=“#request.loginAccess”/>可以取得request保存的值?

  request的相关属性以及参数存放在Stack Context中

  OGNL可以通过#访问Stack Context的值

Stack Context

  存放数据的内存空间,Stack Context 中存放了request的参数、属性、session的属性、application的属性

  attr:在所有的属性范围中获取值,依次搜索page、request、session和application

  OGNL一般都是和Struts2标签一起使用

  <s:debug/>

需求说明

  以租房管理系统为例,使用<s:debug/>观察值栈以及Stack Context的内容

  实现思路

    1、创建实体类House、District、Street、HouseType

    2、创建JSP页面houseView.jsp

    3、修改HouseAction增加view()方法,为request添加值

    4、页面中使用<s:property value="…"/>以及<s:property value="#... "/>获取值

    5、页面中添加<s:debug/>

OGNL访问List

  OGNL如何访问集合(List)

  指明索引即可访问List中的指定元素

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

  可以访问List的方法

  如:<s:property value="streetsList.size()"/>

  如:<s:property value="streetsList. isEmpty()"/>

  可以直接在OGNL中构造List

  如:{1,2,3}

  如:{1,2,3}[0]

  OGNL访问数组与访问List类似

OGNL访问Map

  OGNL如何访问集合(Map)

    Map名称[‘键的名称’]或者Map名称.键的名称访问特定元素

    如:<s:property value="streetsMap['m1']"/>

    如:<s:property value="streetsMap.m1"/>

  可以访问Map的方法

    如:<s:property value="streetsMap.size()"/>

    如:<s:property value="streetsMap. isEmpty()"/>

  可以直接在OGNL中构造Map

    如:#{'first':'zhangsan','second':'lisi'}

    如:#{'first':'zhangsan','second':'lisi'}['first']

    #{'first':'zhangsan','second':'lisi'}.first

OGNL访问Set

  OGNL如何访问集合(Set)

    转换为数组再通过索引即可访问指定元素

    如:<s:property value="streetsSet.toArray()[0]"/>

  可以访问Set的方法

    如:<s:property value="streetsSet.size()"/>

    如:<s:property value="streetsSet. isEmpty()"/>

OGNL其他使用

  OGNL访问静态方法、静态属性

  @类的完全限定名@静态方法名

  @类的完全限定名@静态属性名

  前提:修改struts.xml配置

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

OGNL投影、选择

  投影:选出集合中每个元素的相同属性组成新的集合

  选择:过滤满足选择条件的集合元素

OGNL和Struts2标签的更多相关文章

  1. struts2之OGNL和struts2标签库和ValueStack对象

    OGNL简介: (1)OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目.  struts2框架默认就支持Ognl表达式语言(所以 ...

  2. ognl,jstl,struts2标签中符号#,$,%的用法

    STRUTS2标签操作Map <s:iterator value="sundayMap">           <td colspan="7" ...

  3. OGNL表达式struts2标签“%,#,$”

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

  4. struts2-OGNL表达式-OGNL与Struts2的结合

    1 OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航.OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 1.1 使用OGNL 导包 ...

  5. Struts2(十)OGNL标签二与Struts2标签

    一.Struts2标签的优势 标签库简化了用户对标签的使用 结合OGNL使用,对于集合.对象的访问功能非常强大 提供可扩展的主题.模板支持.极大简化了视图页面的编写 不依赖任何表现层技术 Struts ...

  6. JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总

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

  7. Struts2——(4)OGNL与struts标签

    一.OGNL Object Graphic Navigation Language  对象图导航语言 依赖于 ognl.jar包 OGNL不是Struts框架独有的,它是和框架独立的一种技术. 例如: ...

  8. Struts2标签简介

    Struts2标签简介 Struts2标签的优势 标签库简化了用户对标签的使用 结合OGNL使用,对于集合.对象的访问功能非常强大 提供可扩展的主题.模板支持,极大简化了视图页面的编写 不依赖任何表现 ...

  9. s2-029 Struts2 标签远程代码执行分析(含POC)

    1.标签介绍 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件 ...

随机推荐

  1. IBatisNet基础组件

    DomSqlMapBuilder DomSqlMapBuilder,其作用是根据配置文件创建SqlMap实例.可以通过这个组件从Stream, Uri, FileInfo, or XmlDocumen ...

  2. Ajax实现异步操作实例_针对XML格式的请求数据

    js分类中有一节[原生js异步请求,XML解析]主要说明了js前台是如何处理XML格式请求和如何接受由服务器返回的XML数据的解析,今天我将用一个实例来说明具体要如何操作. 前台的参数类型也是XML使 ...

  3. linux实践——字符集

    一.ASCII码 首先是看得懂ASCII码表: 二 八 十 十六 缩写/字符 0000 0000 0 0 00 NUL(null) 0000 0001 1 1 01 SOH(start of head ...

  4. python实现简易数据库之二——单表查询和top N实现

    上一篇中,介绍了我们的存储和索引建立过程,这篇将介绍SQL查询.单表查询和TOPN实现. 一.SQL解析 正规的sql解析是用语法分析器,但是我找了好久,只知道可以用YACC.BISON等,sqlit ...

  5. PRML读书会第二章 Probability Distributions(贝塔-二项式、狄利克雷-多项式共轭、高斯分布、指数族等)

    主讲人 网络上的尼采 (新浪微博: @Nietzsche_复杂网络机器学习) 网络上的尼采(813394698) 9:11:56 开始吧,先不要发言了,先讲PRML第二章Probability Dis ...

  6. php图片水印添加,压缩,剪切的封装类

    php对图片文件的操作主要是利用GD库扩展.当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码.当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有 ...

  7. css为什么要用悬浮

    如果这个100px的宽度是一个Img,横内元素.右边也是横内元素的话和块级元素是不同的. 2.文字环绕图片. div下有个img然后有个span标签 img最好悬浮,悬浮虽然说脱离文档,但是还是占空间 ...

  8. css的小三角实现的方式

    先上一个简单的例子哈: 此时的方向向下. 如果想方向向上的话用:border-top:0;border-bottom:4px solid; 1. width:0 height:0 border宽度,颜 ...

  9. 线段树好题(2004集训队林涛PPT中的3题)

    1.snake:主要是要意识到全局的可能连法只有一种= =(略坑,题目的最小长度是唬人的……),所以关键就是能否构造出符合题意的图,可以考虑搜索解决,搜出一个就OK了,但是会发现那些满足条件中线段在非 ...

  10. 编写高质量代码改善C#程序的157个建议[协变和逆变]

    前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议42.使用泛型参数兼容泛型接口的不可变性 建议43.让接口 ...