- 浏览: 805891 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 1072scripts/ext/resources/css/ext ... -
扩展Ext中的组件
2010-10-30 10:45 970http://extjs.org.cn/node/89 ht ... -
EXT 的继承
2010-10-30 10:42 1083Ext提供了这样的一个实用函数 Ext.extend ... -
Mysql日期和时间函数大全
2010-10-29 17:48 942Mysql日期和时间函数大 ... -
Java字符集编码与转码
2010-10-29 17:32 1898Java字符集编码与转码 Java字符的c ... -
java字符操作及转码
2010-10-29 17:28 1537import java.util.*; import ... -
如何将一个字符串最快速的倒序输出
2010-10-29 17:26 2443import java.util.*; public ... -
生成随机数 不重复的随机抽取(完美版本)
2010-10-05 10:49 1665随机数相关: import java.io.FileInp ... -
java线程学习总结
2010-10-03 18:18 1116java线程学习总结 1.线程中一些基本术语和概念 1 ... -
Java线程总结
2010-10-03 18:16 849Java线程总结 首先要理解线程首先需要了解一些基 ... -
j2ee是什么?
2010-10-02 09:32 1314j2ee是什么? J2EE Java2平台企业版 ... -
Struts2.0的概述,总体总结
2010-09-30 15:09 1284Struts2.0的概述,总体总 ... -
关于Hibernate的工作原理总结
2010-09-30 08:49 1178关于Hibernate的工作原理 ... -
Jboss Weblogic Websphere 等服务器的区别
2010-09-29 18:27 1595Jboss Weblogic Websphere 等服务器的区 ... -
精通struts2的ognl表达式
2010-09-29 18:22 1169精通struts2的ognl表达式 Struts2 ... -
websphere,weblogic,tomcat区别
2010-09-29 18:10 1515websphere,weblogic,tomcat区别 ... -
事务的基本概念
2010-09-29 17:54 1033事务的基本概念 面试常问 1. 事务定义 事务( ... -
使用java 实现九九乘法表 面试常问
2010-09-29 17:36 1284使用java 实现九九乘法表 面试常问 public ... -
数据库连接池的工作机制 面试常问
2010-09-29 16:44 1979数据库连接池的工作机制 面试常问 当J2EE服务器 ... -
程序员应知——破窗与童子军军规
2010-09-17 17:25 877首先让我来解释一下这两个词,尽管看起来二者之间没有什么必然联系 ...
相关推荐
Struts2的标签库及OGNL表达式语言
Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势: 1、 支持对象方法调用,如xxx.doSomeSpecial(); 2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@...
NULL 博文链接:https://huguifuture.iteye.com/blog/761843
OGNL表达式语言浅谈.pdf
1、 理解Struts2的类型转换类型 2、 理解局部类型转换器与全局类型转换器的区别 3、 掌握Struts2的自定义类型转换 4、 理解OGNL表达式语言
OGNL表达式语言: 相对EL表达式,它提供了平时我们需要的一些功能,如: ? 支持对象的方法调用 ,如 xxx.sayHello(); ? 支持类静态方法调用和值的访问,表达式的格式为@[类全名]@[方法名|值名],例如:@java....
struts2 OGNL,struts2 表达式语言,Struts2 中OGNL表达式的用法,Struts2 #,表达式语言的好处,Struts2 $,struts2 井号,星号,百分号
是一种可以方便地操作对象属性的开源表达式语言。OGNL有如下特点: 1、支持对象方法调用,形式如:objName.methodName(); 2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名 | 值名]...
本篇文章,小编为大家介绍关于国际化、OGNL表达式语言,有需要的朋友可以参考一下
OGNL是对象图导航语言(即该表达式访问的是对象及对象的属性)
1.OGNL表达式语言 2.访问上下文(Context)中的对象需要使用#符号标注命名空间 3.由于ValueStack(值栈)是Struts 2中OGNL的根对象,如果用户需要访问值栈中的对象,在JSP页面可以直接通过下面的EL表达式访问...
Struts 2默认的表达式语言,
本人在学习struts2框架时的学习笔记,主要是ognl表达式语言的运用。希望对大家有所帮助!
应用于Java中的一个开源的表达式语言,它被集成在Struts2等框架中,作用是对数据进行访问,它拥有类型转换、访问对象方法、操作集合对象等功能。
Struts2的OGNL表达式语言Object-Graph Navigation Language
5.2 OGNL表达式语言介绍 75 5.3 Struts2控制标签简介 79 5.3.1 append标签使用介绍 79 5.3.2 generator标签使用介绍 80 5.3.3 if、else、elseif标签使用介绍 81 5.3.4 iterator标签使用介绍 82 5.3.5 merge标签使用...
目录 1. 简介 2. 历史 3. 语法 4. 表达式 常数 属性引用 索引 数组(Array)与列表(List)的索引 JavaBean中的索引属性(Indexed Properties) ...3.1. OGNL 表达式元素 4.1. 集合的特殊伪属性 A.1. OGNL 操作符
NULL 博文链接:https://topmanopensource.iteye.com/blog/378904
Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server HTTP... 二是提供了对MVC的一个清晰的实现,这一实现包含了很多参与对所以请求进行处理的关键组件,如:拦截器、OGNL表达式语言、堆栈。
整理了1个上午 Oracle+Weblogic,主要内容如下: struts2-core-2.1.8.jar Struts2的核心包 struts2-json-plugin-2.1.8.jar json进行异步...ognl-2.7.3.jar OGNL表达式语言,struts2支持该EL antlr-2.7.6.jar HQL解析