OGNL和Struts2标签
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标签的更多相关文章
- struts2之OGNL和struts2标签库和ValueStack对象
OGNL简介: (1)OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. struts2框架默认就支持Ognl表达式语言(所以 ...
- ognl,jstl,struts2标签中符号#,$,%的用法
STRUTS2标签操作Map <s:iterator value="sundayMap"> <td colspan="7" ...
- OGNL表达式struts2标签“%,#,$”
一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一种可以方便地操作对象属性的开源表达式语言.OGN ...
- struts2-OGNL表达式-OGNL与Struts2的结合
1 OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航.OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 1.1 使用OGNL 导包 ...
- Struts2(十)OGNL标签二与Struts2标签
一.Struts2标签的优势 标签库简化了用户对标签的使用 结合OGNL使用,对于集合.对象的访问功能非常强大 提供可扩展的主题.模板支持.极大简化了视图页面的编写 不依赖任何表现层技术 Struts ...
- JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总
一下纯属个人总结摘抄,总结一起方便查看,解决疑问,有遗漏或错误,还请指出. 1,JSTL标签总结: a).JSTL标签有什么用? JSTL是由JCP(Java Commu ...
- Struts2——(4)OGNL与struts标签
一.OGNL Object Graphic Navigation Language 对象图导航语言 依赖于 ognl.jar包 OGNL不是Struts框架独有的,它是和框架独立的一种技术. 例如: ...
- Struts2标签简介
Struts2标签简介 Struts2标签的优势 标签库简化了用户对标签的使用 结合OGNL使用,对于集合.对象的访问功能非常强大 提供可扩展的主题.模板支持,极大简化了视图页面的编写 不依赖任何表现 ...
- s2-029 Struts2 标签远程代码执行分析(含POC)
1.标签介绍 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件 ...
随机推荐
- Silverlight自定义控件开发:温度计
由于在实际项目中需要实时显示采集到的空气温湿度,土壤温湿度值,需要用比较显眼并且清楚明了的方式来展示,这里我们准备采用温度计的方式来进行.一方面是因为大家都熟悉这个,知道怎么去看:同时,温度计本身也比 ...
- MySQL系列——几个常用的mysql命令
1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql> SHOW DATABASES;2:2.创建一个数据库MYSQLDATAmysql> CREATE DATABASE MY ...
- [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
12.3 We have the following method used in a chess game: boolean canMoveTo( int x, int y). This metho ...
- 学习Java第一卷--态度的转变
你对自己的未来有什么规划?做了哪些准备? 认真学习,修身养性,做自己感兴趣的,在大学一定学好Java,将自己的专业学好学精. 我觉得未来十几年或几十年是自己无法完全控制的,只有自己朝着自己心中的目标努 ...
- 测试技能积木-AWK的简要用法
做测试工作,经常要分析日志,有的时候活儿还很脏很累,比如抽取符合某些pattern的行,重新格式化等等.有的时候,我们需要也创造一些测试用数据文件.基于上述两种原因,在Unix Like 系统上,一些 ...
- Scrum敏捷精要
本文抽取Scrum中的一些重要思想和概念,对Scrum敏捷执行的主题流程进行精要的介绍. 一.基本思想 个体和互动 高于 流程和工具 工作的软件 高于 详尽的文档 客户合作 ...
- 秒杀9种排序算法(JavaScript版)
一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...
- 我最优惠网系列(1)——HTML 解析类库HtmlAgilityPack
0. 序言 在开发我最优惠网的过程中,遇到一些问题和技术点,写出来和大家分享,也是我自己对近期工作的整理和记录,预计会有解析HTML类库.本地缓存.链接跳转和C#中执行js代码技巧等方面. 1. Ht ...
- Thrift搭建分布式微服务(二)
第二篇 连接池 连接池配置,请前往Thrift搭建分布式微服务(一) 下面要介绍的其实不是单一的连接池,应该说是连接池集合.因为它要管理多个Tcp Socket连接节点,每个服务节点都有设置了自己 ...
- 怎样写 OpenStack Neutron 的 Plugin (二)
其实上一篇博文中的内容已经涵盖了大部分写Neutron插件的技术问题,这里主要还遗留了一些有关插件的具体实现的问题. 首先,Neutron对最基本的三个资源:Network, Port 和 Subne ...