- 浏览: 822049 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (488)
- struts1 (4)
- spring (13)
- extjs (36)
- mysql (3)
- sqlserver (2)
- oracle (37)
- 杂谈 (11)
- 面试相关 (35)
- Java基础知识总结 (5)
- Java重要知识点 线程和io流知识点 (6)
- 服务器相关 (1)
- 生活 (1)
- jsp (7)
- servlet (2)
- junit (3)
- struts2 (9)
- 开发必备 (4)
- 使用开发工具总结的知识 (4)
- ibatis (12)
- ajax (2)
- dwr (2)
- jquery (1)
- 设计模式 (4)
- Lucene的学习 (5)
- 经验总结 (19)
- mysql全文搜索相关 (7)
- hibernate (33)
- Sphinx (1)
- log4j的总结 (1)
- 敏捷开发 (9)
- 持续集成 (15)
- UML使用总结 (1)
- Scrum (1)
- OO(面向对象编程) (1)
- struts1和struts2总结 (1)
- 数据库加密 (1)
- 多线程和Socket编程 (6)
- PowerDesigner (2)
- 权限相关 (1)
- ant应用总结 (4)
- 面试必知知识点总结 (6)
- io流与nio流总结 面试相关 (1)
- 敏捷管理工具的使用 (7)
- hsqldb相关 (1)
- svn源码相关 (2)
- debug调试技巧总结 (1)
- hibernate和ibatis对比相关 (6)
- eclipse mylyn 插件的使用总结 (2)
- fisheye使用总结 (2)
- java泛型总结 (1)
- ssh整合总结 (10)
- SpringSide的学习总结 (1)
- JPA学习总结 (2)
- RoR 总结 (2)
- 模型驱动 总结 (1)
- Oracle SQL优化技巧 (4)
- 数据库相关资料 (1)
- oracle练习相关 (4)
- PowerDesigner 使用总结 (2)
- Struts实现国际化相关 (2)
- 权限框架 Spring Security (1)
- freemarker使用总结 (1)
- jsp servlet总结相关 (3)
- Java NIO总结 (1)
- 自己学习必须 (3)
- 蝴蝶容器相关 (2)
- eclipse插件的使用 (1)
- myeclipse的使用 (1)
- flex相关 (1)
- javaeye重生后总结的知识点 (2)
- 公司学习总结 (3)
- JAXB 相关 (1)
- ECSide (1)
- EdoJs 企业ajax框架 (1)
- RSA加密算法 (1)
- jbpm相关 (1)
- JMF原理 (1)
- MyEclipse使用总结 (1)
- Funsion Charts 相关总结 (3)
- 常用知识2011 (2)
- Flex与Java整合 (1)
- IBM WebSphere相关 (1)
- jQuery使用技巧 (2)
- 2011年面试相关知识点总结 (2)
- sqlserver开发相关 (8)
- eclipse 打jar相关 (2)
- Oracle/Mysql/SqlServer比较 (1)
- WebService Axis1.4开发相关 (4)
- 进制数的转换 总结 (1)
- WebService Axis2.0开发相关 (0)
- iteye Struts2 Spring Hibernate整合相关 (3)
- iteye osgi资料相关总结 (1)
- iteye ifos相关相关 (1)
- iteye 国际化相关 (1)
- iteye Hibernate缓存机制 (4)
- iteye Struts2 总结 (1)
- iteye Struts标签总结 (0)
- iteye web配置文件大全 (6)
- iteye Efs 框架总结 (1)
- iteye sql优化 (2)
- iteye 大数据量高并发的数据库优化 (1)
- iteye 开发相关 (1)
- iteye s1sh 和 s2sh整合中的问题以及解决 (1)
- iteye s1sh整合实例 (1)
- iteye s2sh整合实例 (1)
- iteye 面试相关 基础篇 (1)
- iteye Android相关 (1)
- iteye 面试相关 Web篇 (1)
- iteye Sql Server相关 (0)
- iteye struts1与struts2比较 (1)
- iteye jquery 和Struts2 (0)
- iteye struts2与其他插件整合 (0)
- iteye jquery 开发相关 (1)
- iteye eclipse结合spket(Ext,Jquery)开发相关 (0)
- iteye myeclipse 使用技巧相关 (0)
- iteye Memcached 缓存系统相关 (0)
- iteye 常用软件相关 (0)
- iteye 最新技术预览 AjaxSwing (0)
- iteye struts上传下载相关 (0)
- iteye 新技术相关 (0)
- test (0)
- iteye 开发Java游戏相关 (0)
- iteye Java反编译 (0)
- iteye XML解析相关 (0)
- iteye 压缩ZIP相关 (0)
- iteye 面试相关 (0)
- iteye Android开发相关 (4)
- csdn (0)
- e-inoc (0)
- iteye http错误码对应说明 (0)
- iteye 面试扩展知识点 (0)
- iteye oracle面试相关 存储过程,触发器,游标等 (0)
- iteye english study (0)
- iteye starflow工作流引擎 (0)
- iteye IBM WebSphere Application Server Toolkit使用相关 (0)
- iteye spring3 (0)
- iteye mybatis (0)
- iteye js技巧总结 (0)
- iteye SEO优化相关 (2)
- iteye QUI网页界面集成框架 (1)
- iteye AjaxAnywhere (1)
- iteye Nutz相关 (1)
- iteye ibatis技巧 (0)
- iteye dwz (0)
- 128个ajax/javascript框架 (0)
- iteye 2012 Java Swing教程 (1)
- iteye 码头集装箱相关 (1)
- iteye swing (2)
- 兼职工作 (0)
- 2012 新总结的面试相关知识点 常用知识点 (1)
- 淘宝网店相关 (0)
- oracle 常用函数 2012新总结 (1)
- 我的时尚潮流屋 (0)
- 2012 年 面试新总结知识 (1)
- 技巧 (1)
- 2013总结 (1)
- 2015工作相关 (3)
- springmvc (5)
- EasyPR-Java (1)
- java (2)
- editplus 4.0 注册码 (1)
- android (1)
- oracle连接数据库相关 (1)
- 编程资料总结 (2)
- 20160808 (1)
- visio 2013 (1)
最新评论
-
drew926:
泛型的类型参数可以有多个?这是java哪个版本支持的?
java泛型总结 -
listenan:
赞!非常感谢。
Scrum总结 -
cwscwj:
写的很深刻,谢谢,看了一遍,过段时间打算再看一遍。
Scrum总结 -
hwedwin:
w
Struts 2中的OGNL\EL的使用总结 -
lanni2460:
不错 很好 支持……
sqlserver三个驱动包下载
OGNL表达式语言介绍
OGNL介绍 OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。 XWork遵循“不要重复地发明同一个轮子”的理论,它的表达式语言核心用的就是这个OGNL。我们先来看看一个简单的例子: 还记得我们用户注册的那个例子吗?我们输入框的name用到的名字就是OGNL的表达式,比如:用户名的输入框:“<input type="text" name="user.username">”,在用户注册成功之后我们要显示用户注册的信息,用了“<ww:property value="user.username"/>”。Input输入框里的“user.username”,它解析成Java语句为:getUser().setUsername();,property标签里的“user.username”解析为Java语句:getUser.getUsername();。 我们的两个表达式都是相同的,但前一个保存对象属性的值,后一个是取得对象属性的值。表达式语言简单、易懂却又功能强大,关于OGNL更多的介绍可以去http://www.ognl.org,那里有很详细的文档 值堆栈-OgnlValueStack OGNL在框架中的应用,最主要是支持我们的值堆栈(Value Stack)——OgnlValueStack,它主要的功能是通过表达式语言来存取对象的属性。用户界面输入数据,它会根据保存表达式将数据依次保存到它堆栈的对象中,业务操作完成,结果数据会通过表达式被获取、输出。 还记得我们用户注册的例子吗?下面我们用一段程序来演示它向 OgnlValueStack中保存、取得数据的步骤: // DemoRegisterValueStack package example.register; import com.opensymphony.xwork.util.OgnlValueStack; public class DemoRegisterValueStack { public void demo(){ RegisterAction action = new RegisterAction(); OgnlValueStack valueStack= new OgnlValueStack(); valueStack.push(action); valueStack.setValue("user.username","Babydavic"); System.out.println("username = "+valueStack.findValue("user.username")); } public static void main(String[] args) { DemoRegisterValueStack demoValueStack = new DemoRegisterValueStack(); demoValueStack.demo(); } } 我们来看一看它的demo()方法: 1、 创建我们的Action(RegisterAction)类的对象action,将action对象压入堆栈valueStack中。在WebWrok中 Action的创建、入栈是在DefaultActionInvocation构造函数中进行的,详细介绍见:ServletDispatcher原理。 2、 通过表达式语言,调用堆栈对象的get()、set()方法,设置该对象的值。 public void setValue(String expr, Object value) 语句:valueStack.setValue("user.username","Babydavic"); 的作用等同于:action.getUser().setUsername("Babydavic"); 3、 通过表达式语言,去堆栈对象中查找我们前面保存的值,并在控制台打印。valueStack.findValue("user.username")等同与语句: action.getUser().getUsername() 最后控制台打印的结果: username = Babydavic CompoundRoot 在OgnlValueStack中,一个堆栈其实是一个List。查看OgnlValueStack你会发现,堆栈就是 com.opensymphony.xwork.util.CompoundRoot类的对象: public class CompoundRoot extends ArrayList { //~ Constructors ///////////////////////////////////// public CompoundRoot() { } public CompoundRoot(List list) { super(list); } //~ Methods //////////////////////////////////////////// public CompoundRoot cutStack(int index) { return new CompoundRoot(subList(index, size())); } public Object peek() { return get(0); } public Object pop() { return remove(0); } public void push(Object o) { add(0, o); } } 我们通过表达式向堆栈对象操作时,我们并不知道堆栈中有哪些对象。OgnlValueStack会根据堆栈由上向下的顺序(先入栈在下面,最后入栈在最上面)依次去查找与表达式匹配的对象方法,找到即进行相应的存取操作。假设后面对象也有相同的方法,将不会被调用。 下面我们看一个对 OgnlValueStack操作的程序,它主要演示了如何对Map对象的存取和OgnlValueStack堆栈的原理 package example.register; import com.opensymphony.xwork.util.OgnlValueStack; public class DemoGroupValueStack { public void demoAction(){ DemoGroupAction action = new DemoGroupAction(); OgnlValueStack valueStack= new OgnlValueStack(); valueStack.push(action); User zhao = new User(); zhao.setUsername("zhao"); zhao.setEmail("zhao@yahoo.com.cn"); User qian = new User(); qian.setUsername("qian"); qian.setEmail("qian@yahoo.com.cn"); valueStack.setValue("users['zhao']",zhao); valueStack.setValue("users['qian']",qian); System.out.println("users['zhao'] = "+valueStack.findValue("users['zhao']")); System.out.println("users['qian'] = "+valueStack.findValue("users['qian']")); System.out.println("users size = "+valueStack.findValue("users.size")); System.out.println("allUserName[0] = "+valueStack.findValue("allUserName[0]")); } public void demoModels(){ User model_a = new User(); model_a.setUsername("model_a"); User model_b = new User(); model_b.setUsername("model_b"); User model_c = new User(); model_c.setUsername("model_c"); OgnlValueStack valueStack= new OgnlValueStack(); valueStack.push(model_a); valueStack.push(model_b); valueStack.push(model_c); System.out.println("username = "+valueStack.findValue("username")); System.out.println("[1].username = "+valueStack.findValue("[1].username")); System.out.println("[0].toString = "+valueStack.findValue("[0]")); System.out.println("[1].toString = "+valueStack.findValue("[1]")); System.out.println("[2].toString = "+valueStack.findValue("[2]")); } public static void main(String[] args) { DemoGroupValueStack demoValueStack = new DemoGroupValueStack(); demoValueStack.demoAction(); demoValueStack.demoModels(); } } package example.register; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class DemoGroupAction { private Map users = new HashMap(); public Map getUsers(){ return this.users; } public List getAllUserName(){ return new ArrayList(users.keySet()); } public String execute(){ //执行业务操作 return null; } public String toString(){ return users.toString(); } } 注意:1、 Map属性的存取,它的表达式语言如:users['zhao'],注意它用’’来引用HashMap的key字符串。 2、 demoModels()方法演示了OgnlValueStack中堆栈的原理,请特别注意它的 [0].toString、[1].toString、[2].toString,它们依次调用堆栈中对象的toString()方法,并逐一的减少堆栈最上面的对象。 控制台输出的结果如下: users['zhao'] = username=zhao;password=null;email=zhao@yahoo.com.cn;age=0 users['qian'] = username=qian;password=null;email=qian@yahoo.com.cn;age=0 users size = 2 allUserName[0] = qian username = model_c [1].username = model_b [0].toString = [username=model_c;password=null;email=null;age=0, username=model_b;password=null;email=null;age=0, username=model_a;password=null;email=null;age=0] [1].toString = [username=model_b;password=null;email=null;age=0, username=model_a;password=null;email=null;age=0] [2].toString = [username=model_a;password=null;email=null;age=0]
发表评论
-
Ext常用问题的总结
2010-10-30 10:48 1097scripts/ext/resources/css/ext ... -
扩展Ext中的组件
2010-10-30 10:45 993http://extjs.org.cn/node/89 ht ... -
EXT 的继承
2010-10-30 10:42 1107Ext提供了这样的一个实用函数 Ext.extend ... -
Mysql日期和时间函数大全
2010-10-29 17:48 965Mysql日期和时间函数大 ... -
Java字符集编码与转码
2010-10-29 17:32 1923Java字符集编码与转码 Java字符的c ... -
java字符操作及转码
2010-10-29 17:28 1567import java.util.*; import ... -
如何将一个字符串最快速的倒序输出
2010-10-29 17:26 2467import java.util.*; public ... -
生成随机数 不重复的随机抽取(完美版本)
2010-10-05 10:49 1687随机数相关: import java.io.FileInp ... -
java线程学习总结
2010-10-03 18:18 1154java线程学习总结 1.线程中一些基本术语和概念 1 ... -
Java线程总结
2010-10-03 18:16 870Java线程总结 首先要理解线程首先需要了解一些基 ... -
j2ee是什么?
2010-10-02 09:32 1384j2ee是什么? J2EE Java2平台企业版 ... -
Struts2.0的概述,总体总结
2010-09-30 15:09 1308Struts2.0的概述,总体总 ... -
关于Hibernate的工作原理总结
2010-09-30 08:49 1200关于Hibernate的工作原理 ... -
Jboss Weblogic Websphere 等服务器的区别
2010-09-29 18:27 1623Jboss Weblogic Websphere 等服务器的区 ... -
精通struts2的ognl表达式
2010-09-29 18:22 1190精通struts2的ognl表达式 Struts2 ... -
websphere,weblogic,tomcat区别
2010-09-29 18:10 1546websphere,weblogic,tomcat区别 ... -
事务的基本概念
2010-09-29 17:54 1054事务的基本概念 面试常问 1. 事务定义 事务( ... -
使用java 实现九九乘法表 面试常问
2010-09-29 17:36 1319使用java 实现九九乘法表 面试常问 public ... -
数据库连接池的工作机制 面试常问
2010-09-29 16:44 2002数据库连接池的工作机制 面试常问 当J2EE服务器 ... -
程序员应知——破窗与童子军军规
2010-09-17 17:25 909首先让我来解释一下这两个词,尽管看起来二者之间没有什么必然联系 ...
相关推荐
### OGNL表达式的理解和应用 ...通过上述介绍可以看出,OGNL作为一种强大的表达式语言,在Struts2框架中扮演着非常重要的角色,不仅可以方便地访问和操作对象属性,还能有效地处理复杂的业务逻辑。
本篇文章将详细探讨Struts2中的OGNL表达式语言以及标签库。 **OGNL(对象图导航语言)** OGNL是一种强大的表达式语言,它允许开发者通过简洁的语法来访问和操作对象的属性。在Struts2框架中,OGNL扮演着至关重要的...
OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,用于获取和设置 Java 对象的属性。它最初是由 John Rose 和 Luke Blanshard 开发,并被广泛应用于多种框架中,尤其是在 Spring Expression ...
Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势: 1、 支持对象方法调用,如xxx.doSomeSpecial(); 2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@...
### OGNL表达式在Struts中的应用解析 #### 一、OGNL表达式简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,主要用于获取和设置Java对象的属性,尤其适用于处理复杂的对象图。它最初由...
NULL 博文链接:https://huguifuture.iteye.com/blog/761843
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于数据绑定和表示层的数据交换。这篇博客文章可能详细探讨了如何在Struts2中使用OGNL来传递和操作数据。 OGNL是Struts2的核心...
其中,OGNL(Object-Graph Navigation Language)是Struts2中的核心表达式语言,用于数据绑定和表示层的数据操作。这篇深入学习的文章主要探讨了OGNL表达式的原理和使用。 首先,我们来理解一下OGNL是什么。OGNL是...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于在视图层和模型层之间进行数据绑定和表达式计算。本文将深入探讨如何在Struts2中有效地使用OGNL表达式。 首先,OGNL是Struts2的...
### Struts2的类型转换与OGNL表达式语言 #### 一、Struts2的类型转换类型 在Struts2框架中,类型转换是处理用户输入数据时的一个关键环节。Struts2支持多种内置的数据类型转换,同时也允许开发人员自定义类型转换...
OGNL表达式语言: 相对EL表达式,它提供了平时我们需要的一些功能,如: ? 支持对象的方法调用 ,如 xxx.sayHello(); ? 支持类静态方法调用和值的访问,表达式的格式为@[类全名]@[方法名|值名],例如:@java....
而OGNL(Object-Graph Navigation Language)是Struts2中使用的一种强大的表达式语言,用于在视图层和模型层之间传递数据。在本案例中,我们将深入探讨OGNL表达式的用法及其在Struts2中的应用。 首先,OGNL是一种...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用程序,特别是Web开发中的框架,如Struts 2。它允许开发者简洁、直观地访问和操作对象图,即对象之间的关联关系。理解并熟练掌握...
OGNL(Object-Graph Navigation Language,对象图导航语言)是一种强大的表达式语言,常用于Java应用,特别是Struts2框架中。它允许开发者通过简洁的语法来访问和操作对象图,包括属性、方法调用以及集合操作。在...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。在本资源“OGNL表达式2讲”中,我们将深入探讨OGNL的使用,特别是针对各种常用的标签和实际应用案例。这个压缩...
**表达式语言(EL)与OGNL概述** 表达式语言(EL)是用于在Java应用程序中简洁地访问和操作对象属性的一种方式。它允许开发者通过简单的语法来读取和设置对象的属性,调用方法,以及执行其他面向对象的操作。在Java EE...
Struts2 OGNL表达式是Java Web开发中一个重要的概念,它是一种强大的对象图形导航语言(Object-Graph Navigation Language)。在Struts2框架中,OGNL被广泛用于视图层,作为数据绑定的主要手段,使得开发者能够方便...
Struts2 OGNL表达式是Java开发中一个重要的知识点,尤其在Web应用程序设计中扮演着核心角色。OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它被Struts2框架广泛用于视图层与模型层之间的数据...
总之,Struts2的OGNL表达式语言极大地简化了视图层的代码,提高了开发效率。ActionContext和valuesStack则提供了灵活的数据访问和管理机制,使得开发者能够更好地控制Web应用的行为。理解这些概念对于深入掌握Struts...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于访问和操作对象图。这个“struts2-OGNL表达式测试”可能是一个测试项目或代码示例,旨在演示如何在Struts2应用中使用OGNL表达式...