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内部含有 ...
随机推荐
- [IIS][ASP.NET]“拒绝访问临时目录”的解决方法
开始以为是“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”文件夹权限的问题,但怎么设置这个权限也解决不 ...
- C语言 百炼成钢11
//题目31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 //判断第二个字母. #define _CRT_SECURE_NO_WARNINGS #include<st ...
- RTX与SVN使用手册适用于新手
一.RTX使用说明 1.下载 http://rtx.tencent.com/rtx/download/index.shtml rtx下载地址(可以只下载客户端) 2.使用方法 1)点击最下面的服务器设 ...
- JS函数调用的方法
JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式:先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来 ...
- Chrome 消息传递机制
Chrome插件开发入门(二)——消息传递机制 Blog | Qiushi Chen 2014-03-31 9538 阅读 Chrome 插件 由于插件的js运行环境有区别,所以消息传递机制是一个重要 ...
- Word 文档插入时间日期禁止自动更新
前些天写了点总结并插入时间和日期,记得勾掉了那个自动更新的,但是刚才打开时发现当时的日期和时间变成现在的了,我就纳闷了,然后我去看那插入日期和时间的那个框,里面确实没有勾选自动更新,于是百度, 百度都 ...
- 什么是co-training
首先先认识下什么是co-training: 在计算机视觉中,我们都知道训练一个分类器的时候,我们需要两类样本,分别是正样本和负样本.监督训练又可以成为off-line training,就是提前准备好 ...
- 高层次综合(HLS)-简介
本文是我近段时间的学习总结,主要参考了Xilinx的技术文档以及部分网上其他资料.文档主要包括ug998<Introduction to FPGA Design Using High-Level ...
- Maven(二)核心知识点
Maven有一些核心的知识点需要了解,比如坐标.仓库.插件.生命周期等概念,这里将依次解释. 坐标 Maven以构件来组成基本的控制单元,而定义这个构件的标示,Maven给定义为“坐标”.坐标是Mav ...
- So... what's up?
So... testing markdown editor what to learn in May? html5 canvas api codeigniter framework var test ...