近期项目用到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(Object-Graph Navigation Language)是Struts2框架中常用的一种表达式语言,用于在视图层方便地访问和操作模型数据。...通过学习和熟练掌握OGNL,开发者可以提高工作效率,构建更加灵活和可维护的Web应用程序。
这是自己用的ognl表达式学习的ppt,不要下载!
NULL 博文链接:https://huguifuture.iteye.com/blog/761843
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用,特别是Struts2框架中,用于数据绑定和动态方法调用。...这个压缩包中的资源提供了学习和研究OGNL的宝贵材料,建议仔细研读并实践。
### 学习OGNL在Struts2中的工作原理 #### OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它是Struts2框架的一个核心特性之一,被广泛应用于框架的...
综上所述,这份"OGNL语言中文资料"应该涵盖了OGNL的基本概念、语法特性以及在实际开发中的应用案例,是学习和掌握OGNL的宝贵资源。通过深入学习和实践,开发者能够更好地利用OGNL提升代码的灵活性和可维护性。
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。...通过深入学习和实践,开发者能够有效地利用OGNL进行数据绑定和表达式计算,提升代码的可读性和效率。
3. **学习文档**:官方文档会详细介绍OGNL的语法和用法,是学习的基础。 4. **参与社区**:加入OGNL相关的开发者社区,讨论问题,分享经验,获取最新的信息和更新。 总而言之,ognl-2.6.11.jar的源码提供了深入了解...
这个压缩包包含了OGNL的源代码和作者的个人笔记,对Java开发者尤其是对OGNL感兴趣的爱好者来说,是很好的学习资源。 首先,我们来了解一下OGNL的基本概念。OGNL的核心功能是提供一种简洁、灵活的方式来访问和操作...
3. **学习OGNL上下文(Context)和栈映射(Stack Mapping)**:在OGNL中,上下文存储了表达式执行过程中的变量和对象,而栈映射则处理表达式中的运算和方法调用。这些组件使得OGNL能够灵活地处理动态环境。 4. **...
学习和熟练掌握这些API将使你在使用ognl进行数据绑定和动态逻辑时更加得心应手。 总之,这个压缩包中的ognl源码和API文档是一份宝贵的资源,对于想要深入理解ognl工作原理或者需要优化使用ognl的开发者来说,它们将...
描述中的“ognl-3.0.6-sources的jar包”是指特定版本(3.0.6)的OGNL源代码打包成的JAR文件,开发者可以下载这个文件来查看或学习OGNL的内部实现。 OGNL的核心功能包括: 1. **对象导航**:通过点号(.)操作符,...
在Eclipse中,你可以将“ognl.jar”作为外部库添加到你的项目中,并通过“Attach Source”功能关联源代码,这样就可以查看和调试OGNL的内部实现,这对于学习、调试或扩展其功能非常有帮助。 OGNL的核心功能包括: ...
通过深入学习OGNL的源码,开发者可以更好地定制和优化Struts2应用,提升性能,增强安全性,并能解决遇到的特定问题。这是一项值得投入时间和精力的任务,特别是对于那些希望在Web开发领域有深入理解的人来说。
**OGNL(Object-Graph Navigation Language)源码分析** OGNL,全称为对象图导航语言,是一种强大的表达式语言,广泛应用于Java应用中,特别是Spring框架中的数据绑定和视图层表达式。它允许开发者以简洁的方式访问...
Struts2 OGNL语言学习笔记 OGNL(Object-Graph Navigation Language)是 Struts 2 中的一种表达式语言,主要用于简化 JSP 页面中的编码,使页面与后台代码分离。下面是 OGNL 语言的主要特点和用法: 1. 支持对象...
OGNL源码的学习主要包括以下几个核心概念: 1. **表达式解析**:OGNL的解析器将用户输入的表达式如`obj.property`转化为内部表示,这个过程涉及词法分析和语法分析。词法分析将输入字符串分解为一个个符号,语法...
这篇深入学习的文章主要探讨了OGNL表达式的原理和使用。 首先,我们来理解一下OGNL是什么。OGNL是一种强大的表达式语言,允许开发者通过简单的字符串表达式来访问和修改对象图。在Struts2中,OGNL用于在Action和...