ognl学习

近期项目用到ognl,才发现我对ognl不太熟悉,特意温习下:

 

ognl的语法

    基本的OGNL语法是十分简单的,当然OGNL支持丰富的表达式,一般情况下,不用担心OGNL的复杂性。例如有一个man对象,该对象有一个name属性,那么使用OGNL来获得该name属性可以使用如下表达式:

        man.name

 

OGNL表达式的基础单元称为导航链,简称为链。一个最简单的链由如下部分组成。

 

属性名称:如上述示例中的name
方法调用:hashCode()返回当前对象的hash code
数组元素:listeners[0]返回当前对象的监听器列表中的第一个元素。

 

 

OGNL表达式基于OGNL上下文中的当前对象,一个将使用上一个的处理结果,开发者可以任意扩展该链的长度,OGNL没有限制。

这个是网上比较经典的例子:

 

 

 

 name.toCharArray()[0].numericValue.toString()

 

具体例子:

以下例子会使用到ognl.jar,大家可以到这个网址下载:http://www.ognl.org

 

定义复合类型:

1.团队类Team

public class Team {
	// 团队名称
	private String teamname;
	// 定义团队人员属性
	private Person person;
	// 团队人数
	private int personnum;

	// 属性的getter和setter方法
	public String getTeamname() {
		return teamname;
	}

	public void setTeamname(String teamname) {
		this.teamname = teamname;
	}

	public Person getPerson() {
		return person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

	public int getPersonnum() {
		return personnum;
	}

	public void setPersonnum(int personnum) {
		this.personnum = personnum;
	}
}

 

2.定义人员类

// 定义人员类
public class Person {
	// 姓名
	private String name;
	// 年龄
	private int age;
	// 人员出生日期
	private Date birthday;

	// 属性的getter和setter方法
	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;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}

 

 3.测试类

public class TestOGNL {
	public static void main(String[] args) {
		// 定义一个Map对象
		Map m = new HashMap();
		// 定义一个Team对象
		Team team1 = new Team();
		team1.setTeamname("团队1");
		// 定义一个Person对象
		Person person1 = new Person();
		person1.setName("pla1");
		// 添加team元素
		team1.setPerson(person1);
		// 定义一个Team对象
		Team team2 = new Team();
		team2.setTeamname("团队2");
		// 定义一个Person对象
		Person person2 = new Person();
		person2.setName("pla2");
		// 添加team元素
		team2.setPerson(person2);

		// 添加Map元素
		m.put("team1", team1);
		m.put("team2", team2);
		try {
			System.out.println(Ognl.getValue("team1.teamname", m));
			System.out.println(Ognl.getValue("team2.person.name", m));
			System.out.println(Ognl.getValue("teamname", team2));
			System.out.println(Ognl.getValue("person.name", team2));
		} catch (OgnlException e) {
		}
	}
}

 

4.ognl中map的视图:

 

5.运行结果:

团队1
pla2
团队2
pla2

(待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值