`
wenrunchang123
  • 浏览: 250959 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

(待续)

  • 大小: 14 KB
分享到:
评论

相关推荐

    OGNL学习资料范例

    OGNL学习资料范例

    OGNL学习笔记,包含struts2中ognl的各种用法

    OGNL(Object-Graph Navigation Language)是Struts2框架中常用的一种表达式语言,用于在视图层方便地访问和操作模型数据。...通过学习和熟练掌握OGNL,开发者可以提高工作效率,构建更加灵活和可维护的Web应用程序。

    struts2中ognl学习

    这是自己用的ognl表达式学习的ppt,不要下载!

    OGNL表达式语言学习

    NULL 博文链接:https://huguifuture.iteye.com/blog/761843

    ognl源码和ognl帮助文档.rar

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用,特别是Struts2框架中,用于数据绑定和动态方法调用。...这个压缩包中的资源提供了学习和研究OGNL的宝贵材料,建议仔细研读并实践。

    学习OGNL在Struts2中工作原理

    ### 学习OGNL在Struts2中的工作原理 #### OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它是Struts2框架的一个核心特性之一,被广泛应用于框架的...

    OGNL语言中文资料

    综上所述,这份"OGNL语言中文资料"应该涵盖了OGNL的基本概念、语法特性以及在实际开发中的应用案例,是学习和掌握OGNL的宝贵资源。通过深入学习和实践,开发者能够更好地利用OGNL提升代码的灵活性和可维护性。

    OGNL表达式的使用及文档

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。...通过深入学习和实践,开发者能够有效地利用OGNL进行数据绑定和表达式计算,提升代码的可读性和效率。

    ognl-2.6.11.jar 官方源码

    3. **学习文档**:官方文档会详细介绍OGNL的语法和用法,是学习的基础。 4. **参与社区**:加入OGNL相关的开发者社区,讨论问题,分享经验,获取最新的信息和更新。 总而言之,ognl-2.6.11.jar的源码提供了深入了解...

    OGNL源代码以及个人笔记

    这个压缩包包含了OGNL的源代码和作者的个人笔记,对Java开发者尤其是对OGNL感兴趣的爱好者来说,是很好的学习资源。 首先,我们来了解一下OGNL的基本概念。OGNL的核心功能是提供一种简洁、灵活的方式来访问和操作...

    ognl2.6.11 源代码

    3. **学习OGNL上下文(Context)和栈映射(Stack Mapping)**:在OGNL中,上下文存储了表达式执行过程中的变量和对象,而栈映射则处理表达式中的运算和方法调用。这些组件使得OGNL能够灵活地处理动态环境。 4. **...

    ognl源码及API

    学习和熟练掌握这些API将使你在使用ognl进行数据绑定和动态逻辑时更加得心应手。 总之,这个压缩包中的ognl源码和API文档是一份宝贵的资源,对于想要深入理解ognl工作原理或者需要优化使用ognl的开发者来说,它们将...

    ognl的jar包

    描述中的“ognl-3.0.6-sources的jar包”是指特定版本(3.0.6)的OGNL源代码打包成的JAR文件,开发者可以下载这个文件来查看或学习OGNL的内部实现。 OGNL的核心功能包括: 1. **对象导航**:通过点号(.)操作符,...

    ognl.jar(ognl-2.6.11.jar)

    在Eclipse中,你可以将“ognl.jar”作为外部库添加到你的项目中,并通过“Attach Source”功能关联源代码,这样就可以查看和调试OGNL的内部实现,这对于学习、调试或扩展其功能非常有帮助。 OGNL的核心功能包括: ...

    struts2中的OGNL的源码

    通过深入学习OGNL的源码,开发者可以更好地定制和优化Struts2应用,提升性能,增强安全性,并能解决遇到的特定问题。这是一项值得投入时间和精力的任务,特别是对于那些希望在Web开发领域有深入理解的人来说。

    ognl源码.rar

    **OGNL(Object-Graph Navigation Language)源码分析** OGNL,全称为对象图导航语言,是一种强大的表达式语言,广泛应用于Java应用中,特别是Spring框架中的数据绑定和视图层表达式。它允许开发者以简洁的方式访问...

    struts2 OGNL语言学习笔记

    Struts2 OGNL语言学习笔记 OGNL(Object-Graph Navigation Language)是 Struts 2 中的一种表达式语言,主要用于简化 JSP 页面中的编码,使页面与后台代码分离。下面是 OGNL 语言的主要特点和用法: 1. 支持对象...

    ognl源码

    OGNL源码的学习主要包括以下几个核心概念: 1. **表达式解析**:OGNL的解析器将用户输入的表达式如`obj.property`转化为内部表示,这个过程涉及词法分析和语法分析。词法分析将输入字符串分解为一个个符号,语法...

    Struts2深入学习----OGNL表达式原理

    这篇深入学习的文章主要探讨了OGNL表达式的原理和使用。 首先,我们来理解一下OGNL是什么。OGNL是一种强大的表达式语言,允许开发者通过简单的字符串表达式来访问和修改对象图。在Struts2中,OGNL用于在Action和...

Global site tag (gtag.js) - Google Analytics