Ognl基本使用
---恢复内容开始---
Ognl默认是从“根”中取数据的
下面Demo中用的是
// 参数1,填写Ognl表达式
// 参数2,Map类=》context上下文
// 参数3,JavaBean,Map,List````等类型,Root 根
Ognl需要的jar包:

先准备两个JavaBean
public class User {
private String name;
private int age;
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
User
public class Address {
private String city;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
Address
下面列举Demo,方法中使用Ognl
public void func1() throws OgnlException {
User user = new User();
user.setName("Tom");
String name = (String) Ognl.getValue("name", new HashMap(), user);
System.out.println(name);
}
从JavaBean根中取数据
//从List根中取数据
public void func2() throws OgnlException {
List<User> list=new ArrayList<User>();
User user = new User();
user.setName("Tom");
list.add(user);
User user2=new User();
user2.setName("Jerry");
list.add(user2);
//[1]代表list中第二个数据
String name = (String) Ognl.getValue("[1].name", new HashMap(), list);
System.out.println(name);
}
从List根中取数据
//稍复杂的从JavaBean中取数据
public void func4() throws OgnlException{
User user=new User();
Address address=new Address();
address.setCity("北京");
user.setAddress(address);
String city=(String) Ognl.getValue("address.city", new HashMap(),user);
System.out.println(city);
}
稍复杂的从JavaBean中取数据
//从第二个参数Map中取数据
public void func3() throws OgnlException{
Map<String, Object> context=new HashMap<String,Object>();
context.put("name", "Tom");
//为了验证确实是取自Map中,添加一个JavaBean
User user=new User();
user.setName("Jerry");
//如果取自Map,则需要在name前加#,否则默认取自第三个JavaBean中
String name = (String) Ognl.getValue("#name",context, user);
System.out.println(name);
}
从第二个参数Map中取数据
// 用Ognl表达式用getValue方法给对象赋值
public void func5() throws OgnlException {
User user = new User();
Integer age = (Integer) Ognl.getValue("age=23", new HashMap(), user);
System.out.println(user.getAge());
System.out.println(age);
}
用Ognl表达式用getValue方法给对象赋值
// 用Ognl表达式用setValue方法给对象赋值
public void func6() throws OgnlException {
User user = new User();
Ognl.setValue("age", new HashMap(), user,23);
System.out.println(user.getAge());
}
用Ognl表达式用setValue方法给对象赋值
在User类中新增一个非静态方法和一个静态方法
public static String getNowTime1(){
return new SimpleDateFormat("yyyy/MM/dd").format(new Date());
}
public String getNowTime2(){
return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
}
User新增方法
// 调用根中方法
public void func7() throws OgnlException {
// 静态方法和普通方法调用方式一样
User user = new User();
String nowTime1 = (String) Ognl.getValue("getNowTime1()", new HashMap<>(), user);
String nowTime2 = (String) Ognl.getValue("getNowTime2()", new HashMap<>(), user);
System.out.println(nowTime1);
System.out.println(nowTime2);
}
调用根中方法
为了测试调用其他类中方法,新增一个类
import java.text.SimpleDateFormat;
import java.util.Date; public class DateUtils {
public static String getNowTime1(String format) {
return new SimpleDateFormat(format).format(new Date());
} public String getNowTime2(String format) {
return new SimpleDateFormat(format).format(new Date());
}
}
获取时间
// 调用其他类静态方法并传参数
public void func8() throws OgnlException {
// 使用@符号调用其他类中静态方法,不再受必须在根中的限制
User user = new User();
String nowTime = (String) Ognl.getValue("@cn.hjp.utils.DateUtils@getNowTime1('yyyy-MM/dd')", new HashMap<>(),
user);
System.out.println(nowTime);
}
调用其他类静态方法并传参数
在DateUtils类中新增一公共变量 public static Double d=12.34;进行下面测试
//调用其他类中静态变量
public void func9() throws OgnlException{
User user=new User();
Double d=(Double) Ognl.getValue("@cn.hjp.utils.DateUtils@d", new HashMap<>(),
user);
System.out.println(d);
}
调用其他类中静态变量
//进行运算
public void func10() throws OgnlException{
User user=new User();
Integer d=(Integer) Ognl.getValue("1+1", new HashMap<>(),
user);
System.out.println(d);
}
进行运算
// 逗号“,”连接符的使用
public void func11() throws OgnlException {
User user = new User();
// 多表达式,逗号分隔,都参与运算,只是最后一个才会返回结果
String name = (String) Ognl.getValue("name='Tom',name", new HashMap<>(), user);
Integer age = (Integer) Ognl.getValue("name='Tom',age=23", new HashMap<>(), user);
System.out.println(name);
System.out.println(age);
}
逗号“,”连接符的使用
// 创建List集合
public void func12() throws OgnlException {
User user = new User();
List list = (List) Ognl.getValue("{'Tom','Lily','Jerry','Jack'}", new HashMap<>(), user);
System.out.println(list);
}
创建List集合
// 创建Map,要使用#符号,指定为Map类型
public void func13() throws OgnlException {
User user = new User();
Map map = (Map) Ognl.getValue("#{'name':'Tom','age':23}", new HashMap<>(), user);
System.out.println(map);
}
创建Map,要使用#符号,指定为Map类型
方便演示创建对象,重写User类的ToString方法:
public String toString() {
return "User [name=" + name + ", age=" + age + ", address=" + address + "]";
}
// 使用Ognl创建对象
public void func14() throws OgnlException {
User user1=new User();
User user2 = (User) Ognl.getValue("new cn.hjp.bean.User()",new HashMap<>(), user1);
System.out.println(user2);
}
使用Ognl创建对象
//Ognl中的in和 not in 运算符
public void func15() throws OgnlException{
User user=new User();
Boolean exists=(Boolean) Ognl.getValue("'Tom' in {'Tom','Lily','Jerry','Jack'}", new HashMap<>(),
user);
Boolean notexists=(Boolean) Ognl.getValue("'Tom' not in {'Tom','Lily','Jerry','Jack'}", new HashMap<>(),
user);
System.out.println(exists);
System.out.println(notexists);
}
Ognl中的in和 not in 运算符
// 集合投影
public void func16() throws OgnlException {
List<User> list = new ArrayList<User>();
User user1 = new User();
user1.setName("Tom");
user1.setAge(23);
list.add(user1);
User user2 = new User();
user2.setName("Jerry");
user2.setAge(24);
list.add(user2);
//只获取name属性
List l = (List) Ognl.getValue("#this.{name}", new HashMap<>(), list);
System.out.println(l);
}
集合投影
// 集合选择
public void func17() throws OgnlException {
List<User> list = new ArrayList<User>();
User user1 = new User();
user1.setName("Tom");
user1.setAge(17);
list.add(user1);
User user2 = new User();
user2.setName("Jerry");
user2.setAge(24);
list.add(user2);
//只获取name属性
List l = (List) Ognl.getValue("#this.{?age>18}", new HashMap<>(), list);
System.out.println(l);
}
集合选择
Ognl基本使用的更多相关文章
- Struts2入门(五)——OGNL和标签库
一.前言 OGNL和标签库的作用,粗暴一点说,就是减少在JSP页面中出现java代码,利于维护. 1.1.OGNL 1.1.1.什么是OGNL? OGNL(Object-Graph Navigatio ...
- Ognl表达式基本原理和使用方法
Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...
- 4. ValueStack 和 OGNL
1. 属性哪来的 当我们通过Action处理完用户请求以后,可以直接在页面中获取到 action 的属性值. 如果我们在页面中尝试遍历四个域中的属性,会发现域中并没有username之类的Action ...
- Struts2中的Ognl
OGNL(Object-Graph Navigation Language)全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整 ...
- Struts2(Ognl)
OGNL(Object-Graph Navigation Language)全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整 ...
- Strust OGNL详解
首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...
- Struts2深入学习:OGNL表达式原理
今天看了ognl表达式,不是很理解,准备以后再回头复习: http://developer.51cto.com/art/201203/322509.htm#case1
- OGNL的使用
访问Action中的普通属性: <s:property value="loginname"/><br/> 访问Action中的对象属性: <s:pro ...
- Struts2的OGNL表达式语言
一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...
- Struts 2的OGNL的根对象
Struts2中的OGNL表达式语言是对Xwork的OGNL的封装.我们要理解一下几点: 1. Struts2中将ActionContext作为OGNL的上下文环境(ActionContext内部含有 ...
随机推荐
- 如何将NTFS格式的移动硬盘挂接到Mac OS上进行读写(Read/Write)操作
现在硬盘便宜,很多同学都有移动硬盘,如果你同时使用Windows与Mac OS的话,移动硬盘最好不要使用NTFS文件系统,否则在Mac OS上,你只能读你的移动硬盘,不能写. 但是实际上的情况是,移动 ...
- C#泛型-模板特化
class TClass<T, K> { } class SubTClass<T, C, K> : TClass<Char, K> { } class SubTCl ...
- HashMap 中的 entrySet()使用方法 2016.12.28
package map; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import ...
- 从0开始学java——JUnit4 复习,其实基本思想还是那些,不过采用了新的注释格式的语法
看了深入探索 JUnit 4(http://www.ibm.com/developerworks/cn/education/java/j-junit4/index.html ) 主要是讲了新的基于注 ...
- 如何下载Hibernate
官网: http://hibernate.org/ 打开hibernate官网,选择Hibernate ORM,点击左侧的Downloads 点击Downloads后,可以看到如下页面,右侧是各个版本 ...
- 第一个C语言编译器是怎样编写的?
首先向C语言之父Dennis MacAlistair Ritchie致敬! 当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语言编写的,有一些语言比如Clojure,Jython等是基于J ...
- 阿里云OSS NET SDK 引用示范程序
1.引入SDK bin文件,下载地址:https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/internal/oss/0.0.4/assets/sdk/ ...
- So... what's up?
So... testing markdown editor what to learn in May? html5 canvas api codeigniter framework var test ...
- 一个简单js select插件
现在,通过一个select插件,来介绍一下js插件的构建过程. 1.先上效果图 2.目录构建 (1)这个select插件,我给它起名交hongselect,所以呢,首先建个hongselect的文件夹 ...
- 在线富文本编辑器FckEditor配置(.Net Framework 3.5)
进入FCKeditor文件夹,编辑 fckconfig.js 文件.1.上传设置 . var _FileBrowserLanguage = 'php' ; // a ...