第四章:struts2中的OGNL.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IBM Software Group ? ? 2008 IBM Corporation IBM Software Group IBM Software Group IBM Software Group 第四章:Struts 2中的OGNL 房栋 学习目标 掌握OGNL表达式的使用 掌握值栈的概念 掌握struts2对OGNL表达式的增强 OGNL简介 Struts2的一个关键特性就是它可以对Action携带的数据进行读写访问,例如在前面我们在表单中使用user.username指定数据传递给Action的user对象的username属性,在 s:property 元素中使用user.username来获取用户的名字,这是通过表达式语言 Expression Language,EL 来实现的,这种表达式语言就是OGNL。 OGNL的全称是Object Graph Navigation Language 对象图导航语言 ,它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。 为什么要使用OGNL 视图层的表达式语言通常是用来简化数据的访问操作,取代Java脚本代码,提供更清晰的视图层实现。例如,在JSP页面中使用JSP2.0内置的表达式语言获取user对象的username属性,可以简写为$ user.username ,如果换作Java脚本代码,则需要写为: %@ page language java import java.util.*,com.bim.pojo.User pageEncoding gbk% % User user User request.getAttribute user ; String username user.getUsername ; out.print username ; % 哪一种方法更为简捷,相信大家已经一目了然了。 既然JSP2.0已经内置了一种表达式语言,那么为什么还要使用OGNL呢? 相对于其它的表达式语言而言,OGNL的功能更为强大,它提供了很多高级而必须的特性,例如强大的类型转换功能,静态或实例方法的执行,跨集合投影(projection),以及动态lambda表达式定义等。 OGNL表达式语言介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写, 它是一个开源项目。 Struts2框架使用OGNL作为默认的表达式语言。 OGNL相对其它表达式语言具有下面几大优势: 1、支持对象方法调用,如xxx.doSomeSpecial ; 2、支持类静态的方法调用和值访问,表达式的格式: @[类全名(包括包路径)]@[方法名 | ?值名],例如: @java.lang.String@format foo %s, bar 或@tutorial.MyConstant@APP_NAME; 3、支持赋值操作和表达式串联; 4、访问OGNL上下文(OGNL context)和ActionContext; 5、操作集合对象。 Ognl 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现 了java.utils.Map的接口. struts2中的OGNL上下文 struts2中的OGNL上下文 struts2对OGNL上下文的概念又做了进一步扩充,在struts2中,OGNL上下文通常如下所示: Java代码 |-- application #application来访问 | |-- session #session来访问 | context map|--OgnlValueStack root [ user, action, OgnlUtil, ... ] $ 属性 | |-- request #request | |--parameters #parameters | |-- attr #attr 我们可以使用#request访问HttpServletRequest对象, #session访问HttpSession对象,但请注意根对象是什么?是ValueStack! 那么ValueStack是什么?值栈。也就是一组对象的堆栈。也就是说,在struts2中,根对象不是我们通常的一个对象,而是一组对象。我们可以push新的对象到值栈中,也可以弹出值栈的栈顶对象。假设我们将user对象push到值栈中,那么如下的表达式将与之前我们见过的表达式一样,具有相同的结果: Java代码 name // 取用户的姓名 age // 取用户年龄 birt

文档评论(0)

boss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档