OGNL 对象视图导航语言
【Object Graphics Navigate Language】
类似于EL(Expression Language)表达式,
可以帮助我们在配置文件、JSP中来获取对象的值
这门语言比EL功能更强,体现在运算,还可以做一些对
数据的条件筛选
在获取普通属性和调用普通方法的时候,在每一个值的前面
实际上有一个this对象,这个this对象就是处理这个请求的
action的对象(不是单例模式)
//循环 value="要循环的集合"
<s:iterator var="p" value="list">
<s:property value="#p.pname" />
</s:iterator>
//逻辑判断
<s:if test="num <= 10">
小于等于10
</s:if>
<s:else if test="num <= 5">
小于等于5
</s:else if>
<s:else>
其他情况
</s:else>
从Action取得普通属性的值:
<s:property value="username" />
从Action取得对象的普通属性的值:
<s:property value="users.name" />
从Action取得对象的普通属性的值:
<s:property value="users.dog.type.toUpperCase()" />
调用Action的普通方法:
<s:property value="sum(1,2)" />
调用Action对象的普通方法:
<s:property value="users.sum(1,3)" />
调用Action对象的普通方法:
<s:property value="users.dog.sum(1,3)" />
开启静态访问开关
在struts.xml中增加一个常量的配置
<constant name="struts.ognl.allowStaticMethodAccess"value="true"></constant>
得到Action的静态属性:
//<s:property value="@包名.类名@属性" />
<s:property value="@action.OgnlAction@PI" />
得到Action的静态方法:
//<s:proerty value="@包名.类名@方法名(参数)"/>
<s:property value="@action.OgnlAction@sum(2.1,3.1)" />
调用Action对象的静态属性:
<s:property value="@entity.Users@PI" />
调用Action对象的静态属性:
<s:property value="@entity.Users@sum(2.1,3)" />
调用默认类(Math类)静态方法:
<s:property value="@java.lang.Math@max(3,4)" />
调用Action的构造方法:
<s:property value="new action.OgnlAction()" />
调用Action的构造方法:
<s:property value="new action.OgnlAction('tom').sum(3,4)" />
调用Action对象的构造方法:
<s:property value="new entity.Users().sum(4,5)" />
得到list集合:
<s:property value="list" />
得到list集合某个元素:
<s:property value="list[0]" />
得到list集合中的某个元素的属性的值:
<s:property value="list[0].name" />
得到list集合中的某个元素的属性的值:
<s:property value="list[0].dog.type" />
得到list集合中元素的某一个属性的集合:
<s:property value="list.{name}[0]" />
得到list集合中元素的属性的集合:
<s:property value="list.{dog}.{type}[0]" />
得到list集合长度:
<s:property value="list.size()" />
得到set集合:
<s:property value="set" />
得到set集合某个元素:
<s:property value="set.iterator().next()" />
得到set集合中的属性的集合:
<s:property value="set.{name}[0]" />
得到set集合中的属性的集合:
<s:property value="set.{dog}.{type}[0]" />
得到set集合长度:
<s:property value="set.size()" />
得到map集合:
<s:property value="map" />
得到map集合中某个元素:
//<s:property value="map['key名']" />
<s:property value="map['u1']" />
得到map集合中所有的key:
<s:property value="map.keys" />
得到map集合中所有的value:
<s:property value="map.values" />
得到map集合长度:
<s:property value="map.size()" />
【OGNL中的条件筛选】
1、所有的条件都封装在{}
2、利用条件筛选出来结果后,有可能并非全部都需要
可以通过这三个字符获取你想要的结果
?所有的、^取第一个(异或符号)、$取最后一个
3、#this表示的并非是“.”前面那个集合对象,
而是前面那个集合里面的某一个元素
带条件的集合(?--所有):
<s:property value="list.{?#this.id>=1002}" />
带条件的集合($--最后):
<s:property value="list.{$#this.id>=1002}" />
带条件的集合(^--首个):
<s:property value="list.{^#this.id>=1002}" />
带条件的集合(?--所有):
<s:property value="list.{?#this.id>=1002 and #this.name.length()>4}" />
带条件的集合(?--所有):
<s:property value="list.{?#this.id>=1002}
.{dog}.{?!(#this.type.length()>4)}[0].type" />
===================集合操作==========================
<fieldset>
<legend>LIST操作</legend>
<s:property value="list[1].getPname()" />
<br>
<s:property value="list.{dog}.{dname}[1]" />
<s:property value="list.{dog.dname}[1]" />
</fieldset>
<fieldset>
<legend>SET操作</legend>
<s:property value="set.iterator().next().pname" />
</fieldset>
<fieldset>
<legend>MAP操作</legend>
<s:property value="map['a']" />
<br>
<s:property value="map.values" />
</fieldset>
<fieldset>
<legend>条件筛选</legend>
<s:property value="list.{$#this.age>=18}.{pname}" />
<br>
<!-- 获取所有年满18岁,并且他们的狗的年龄大于等于2岁 -->
<s:property value="list.{?#this.age>=18 and #this.dog.age>=2}.{pname}" />
<s:property value="list.{?#this.age>=18}.{dog}.{?#this.age>=2}.{dname}" />
</fieldset>
OGNL 对象视图导航语言的更多相关文章
- OGNL(对象图导航语言)学习
一.关于OGNL(Object-Graph Navigation Language),一种可以方便地操作对象属性的开源表达式语言. 特点: 1)支持对象方法调用,形式如:objName.method ...
- UnrealEd3视图导航
本博客使用的版本:2010-08 [更多其他的UE3版本] [最新的UE3版本 -- 2015-02] [unreal engine wiki] 注:dx11被加入2011-03月版 ...
- UnrealEd3视图导航及常用快捷键
本博客使用的版本:2010-08 [更多其他的UE3版本][tps所用版本: 2011-02] [最新的UE3版本 -- 2015-02] [unreal engine wiki 中文w ...
- JS事件对象,筋斗云导航练习,跟随鼠标练习,放大镜练习,进度条练习
JS事件对象,筋斗云导航练习,跟随鼠标练习,放大镜练习,进度条练习 btn.onclick = function(event) { 语句 } 其中event就是事件对象,在这个方法中指向的对象是onc ...
- ABC定制视图导航控制器
ABCustomUINavigationController ABC定制视图导航控制器 Subclass of UINavigationController for overwriting ...
- Oracle对象-视图和索引
Oracle 对象-视图 视图概念 视图就是提供一个查询的窗口,所有的数据来自于原表 创建视图[必须有dba权限] --查询语句创建表 create table emp as select * f ...
- Ognl对象图导航语言 源码
// -------------------------------------------------------------------------- // Copyright (c) 1998- ...
- ShareSDK(iOS版)开发实践:自定义授权视图和分享视图导航栏
最近很多人问ShareSDK的授权视图和分享视图的导航栏样式与应用风格不一致,能否修改导航栏的样式?那么这里我就2.6.1版本进行说明(还在使用1.x版本的朋友建议升级到2.x版本,在新版本中可定制的 ...
- react-native-vector-icons的简单使用,图片,按钮,标签视图,导航条
ICONS是可以直接使用图片名, 就能加载图片的三方,使用很方便, 你不需要在工程文件夹里塞各种图片, 节省很多空间,下面就来看看怎么使用吧! 1. 首先打开terminal进入到我们的工程文件夹下, ...
随机推荐
- Sublime Text3 激活教程
Sublime Text3激活 在使用Sublime时会定期弹出购买提示框,避免出现购买提示,影响工作效率,我们可以使用网上的激活码,虽然有些不厚道,但是工作以后,一定选择购买正版支持一下. 打开Su ...
- 鼠标指向GridView某列显示DIV浮动列表
需求: 当GRIDVIEW数据列过多,不方便全部显示在同一行或者一些子信息需要鼠标指向某关键列GRIDVIEW的时候显示其子信息. 设计:先把需要显示的浮动数据一次过抓取出来.而不是鼠标指向的时候才从 ...
- cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题
转自:http://www.tuicool.com/articles/U3URRrI 项目中经常会遇到将一张图像处理成灰色的需求,为了节省资源,一般不会让美术再做一套同样的灰度图,通常会通过代码处理让 ...
- php safe mode bypass all <转>
PHP safe mode bypass from 4.x to 5.x all. Functions: * mb_send_mail* curl_init* imap_open* mail* ion ...
- mysql主从同步单个表实验记录
问题的提出: 在CRM管理系统与运营基础数据平台之间需要有数据表进行交换,说是交换,其实是单向的,就是CRM里面的一些数据需要实时同步到运营基础数据平台中. 解决方案: A.采用时间戳的办法进行代码开 ...
- 以优美方式编写JavaScript代码
英文原文:CoffeeScript: The beautiful way to write JavaScript 我用 JavaScript 编程很多年了,写了大量的 JavaScript 代码,即便 ...
- Android端百度地图API使用详解
百度地图API简介 百度地图移动版API(Android)是一套基于Android设备的应用程序接口,通过该接口,可以轻松的访问百度服务和数据,构建功能丰富.交互性强的地图应用程序. 百度地图移动版A ...
- oc-28-构造函数
Dog.h #import <Foundation/Foundation.h> @interface Dog : NSObject { NSString *_name; int _age; ...
- Xcode快照——管理应用程序版本
转自:http://blog.csdn.net/yuanbohx/article/details/8919474 1.创建快照:FIle → Create Snapshot 2.查看快照:Window ...
- OS X 10.9 Mavericks 安装 thrift 0.9.1
通过Homebrew安装的时候,编译会报错.查了一下资料,原来是10.9系统默认使用的libc++的库,而且移除了C++ 11标准前tr库,所以编译存在问题.且笔者使用的时候,brew安装只支持到0. ...