- 浏览: 62433 次
- 性别:
- 来自: 广州
文章分类
最新评论
OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,OGNL是一个开源项目,读者可以访问其官方站点www.ognl.org以获得源代码和相关资料。OGNL是一种功能强大的EL(Expression Language,表达式语言),可以通过简单的表达式来访问Java对象中的属性。
OGNL先在WebWork项目中得到应用,也是Struts 2框架视图默认的表达式语言,可以说,OGNL表达式是Struts 2框架的特点之一。
8.1.3 一个使用OGNL的示例
下面笔者以一个简单的示例来帮助读者理解OGNL表达式。使用OGNL表达式,需要在www.ognl.org网站下载一个ognl.jar插件包,将该文件复制到classpath路径下即可。建立一个复合类型,如代码8.1所示。
代码8.1 定义复合类型
package ch8;
import java.util.Date;
//团队类
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;
}
}
// 定义人员类
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;
}
}
import java.util.Date;
//团队类
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;
}
}
// 定义人员类
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;
}
}
代码8.1所示内容定义了两个复合类型:团队(team)和人员(person)类型。使用OGNL表达式示例,如代码8.2所示。
代码8.2 使用OGNL表达式示例
package ch8;
import java.util.HashMap;
import java.util.Map;
import ognl.Ognl;
import ognl.OgnlException;
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) {
}
}
}
import java.util.HashMap;
import java.util.Map;
import ognl.Ognl;
import ognl.OgnlException;
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) {
}
}
}
代码8.2所示内容定义了一个Map类型的嵌套属性,如图8.1所示。
图8.1 嵌套属性示意图
运行该示例,控制器显示如下信息:
团队1
pla2
团队2
pla2
★ 说明 ★
OGNL可以使用非常简单的表达式来访问多层嵌套属性,为开发者提供了一个有力的工具。
发表评论
-
OGNL表达式 用法详解
2012-04-19 11:44 9023表达式通常用来访问页面中的各种变量,进行结果输出. s ... -
struts2.2.3最小jar
2011-07-18 11:32 1794struts2-core-2.2.3.jar :Struts ... -
转: struts2 标签 2
2011-07-05 11:41 1549一、概要:1、JSP标签技术始于JSP1.12、作用: ... -
转:struts2 标签
2011-07-05 11:39 931struts标签的继承 BodyTagSuppor ... -
struts.xml文件属性配置
2011-06-24 16:32 1225开发中发现struts还有co ... -
FilterDispatcher配置
2011-06-24 16:30 1353配置Struts 2的FilterDispatcher类时,可 ... -
struts.xml配置详解
2011-06-24 16:29 775地址:http://www.cnblogs.com/fmric ... -
struts.properties配置详解
2011-06-24 16:14 960在Struts2的核心包中org\apache\strut ... -
转:Struts 2 下载文件(12)下
2011-06-22 18:54 881(2)同时修改配置文件,增加一个input逻辑视图,修 ... -
转:Struts 2 下载文件(12)中
2011-06-22 18:53 76911.3.2 在Action中指定下载资源 前面的 ... -
转:Struts 2 下载文件(12)上
2011-06-22 18:52 108211.3 Struts 2控制文件下载 文件下载相对于 ... -
转: Struts 2多文件上传(11)下
2011-06-22 18:51 843(3)在配置文件中增加如下配置: ... -
转: Struts 2多文件上传(11) 上
2011-06-22 18:50 87011.2 多个文件上传 很多应用都要求在一个界面中可以 ... -
转: struts 2专用表达式(10)下
2011-06-22 18:49 9048.2 Struts 2的OGNL OGN ... -
转: 数据校验功能-AJAX输入校验(9)下
2011-06-22 18:45 12107.4.4 建立JSP视图 建立一个reg-aja ... -
转: 数据校验功能-AJAX输入校验(9)中
2011-06-22 18:43 8877.4.2 建立业务控制器 建立一个简单的业务 ... -
转: 数据校验功能-AJAX输入校验(9)上
2011-06-22 18:41 9287.4 AJAX输入校验 Struts 2框架在使用客 ... -
转: Struts 2的拦截器(8)下
2011-06-22 18:39 858(3)在ch5包内建立一个业务控制器Reg,如代码5. ... -
转: Struts 2的拦截器(8)上
2011-06-22 18:39 747拦截器(Interceptor)是Struts 2的核 ... -
转: 应用Struts 2 的国际化支持特性(7)下
2011-06-22 18:37 792(4) 同样,success.jsp也使用了标签库,如 ...
相关推荐
### Struts1与Struts2的主要区别 ...综上所述,Struts2相比Struts1在灵活性、可测试性、输入数据处理、表达式语言等方面都有显著改进。这些变化不仅简化了开发过程,也提升了应用程序的整体性能和稳定性。
5. **上下文访问**:Struts2 ActionContext提供了一个全局上下文,可以在OGNL表达式中访问请求、session、application等范围的变量。 6. **值栈**:Struts2中的值栈是OGNL的主要工作区域,它存储了Action对象和其他...
Struts2 OGNL表达式是Java开发中一个重要的知识点,尤其在Web应用程序设计中扮演着核心角色。OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它被Struts2框架广泛用于视图层与模型层之间的数据...
10. **国际化与本地化**: Struts2提供了对多语言的支持,可以通过资源文件轻松实现界面的国际化。 使用Struts2核心jar包时,需要正确配置web.xml以启用Struts2框架,并在项目中引入相应的依赖。开发过程中,还需要...
struts jstl el表达式示例代码 struts jstl el 表达式 源码
Struts2 OGNL(Object-Graph Navigation Language)表达式是一种强大的、动态的数据绑定和脚本语言,广泛应用于Struts2框架中。它允许开发者在视图层与模型层之间灵活地传递数据,增强了MVC架构中的灵活性。本文将...
Struts2 OGNL表达式是Java Web开发中一个重要的概念,它是一种强大的对象图形导航语言(Object-Graph Navigation Language)。在Struts2框架中,OGNL被广泛用于视图层,作为数据绑定的主要手段,使得开发者能够方便...
struts2 OGNL表达式使用 OGNL(Object-Graph Navigation Language)是对象图导航语言,允许开发者在Struts2应用程序中访问和操作对象及其属性。下面是OGNL表达式的使用方法: 访问基本属性 1. 访问值栈中action的...
xwork-core-2.2.1.jar:Xwork核心类库,Struts2在其上构建。 ognl-3.0.jar:对象图导航语言(Object Graph Navigation Language),它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致...
struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用
5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于在Action和视图之间传递数据。 6. **拦截器**:拦截器是Struts2的核心组件,用于处理请求、验证输入、事务管理、日志...
- **上下文感知**:OGNL根据当前上下文环境解析表达式,如在Struts2中,它可以访问ActionContext中的值栈。 **2. OGNL在Struts2中的作用** 在Struts2框架中,OGNL负责数据绑定和表达式求值。当用户提交表单时,...
第四章:Struts2中的OGNL.ppt详细探讨了Struts2框架中使用OGNL(Object-Graph Navigation Language,对象图导航语言)的关键概念和技术。OGNL作为一种强大的表达式语言,使得开发者能够方便地访问Action携带的数据,...
4. **标签库**:struts2-dojo-plugin.jar、struts2-tiles-plugin.jar等提供了丰富的标签库,帮助开发者在JSP页面上更方便地构建用户界面。 5. **拦截器(Interceptors)**:Struts2的拦截器机制允许在Action执行...
"STRUTS2站点,STRUTS2学习实例10"很可能是针对Struts2框架的一个教学资源,旨在帮助开发者深入理解Struts2的工作原理和实践应用。 在Struts2的学习实例10中,我们可能会涵盖以下几个核心知识点: 1. **Action类与...
5. **表达式语言(EL)和OGNL**:Struts2使用OGNL作为默认的表达式语言,用于在视图层与模型层之间传递数据。 6. **Struts2的生命周期**:包括初始化、请求处理、响应生成等阶段。 7. **Action的注解配置**:...
7. **OGNL(Object-Graph Navigation Language)**:Struts2的默认表达式语言,用于在Action与视图之间传递数据。在JSP页面中,可以通过OGNL访问Action的属性。 8. **Validation框架**:Struts2提供了强大的表单...
10. **测试支持**:Struts2提供了测试框架,如Struts2 TestNG插件,方便进行单元测试和集成测试,确保应用的正确性。 综上所述,Struts2的核心包和IO包是构建基于Struts2的应用程序不可或缺的部分,它们为开发者...
10. **S2-005安全漏洞**:Struts2-showcase还包含了一些已知的安全漏洞实例,用于教育开发者如何避免和修复这些漏洞。 通过深入研究和分析struts2-showcase项目,开发者能够全面了解Struts2的特性和最佳实践,从而...