- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Struts2的OGNL标签详解
Struts2的OGNL标签详解一、Struts2可以将所有标签分成3类:UI标签:主要用于生成HTML元素的标签。非UI标签:主要用于数据库访问,逻辑控制等标签。Ajax标签:用于Ajax支持的标签。对于UI标签,则有可以分为两类:表当标签:表单标签主要用与生成HTML页面的from元素,以及普通表单元素的标签。非表单标签:非表单标签主要用于生成页面的树、Tab页等。流程控制标签:主要包含用于实现分页、循环等流程的标签。数据访问标签:主要包含用于输出ValueStack中的值,完成国际化等功能的标签。Struts2标签库分类图:二、使用Struts2标签库的准备:1、在Web.Xml文件中增加标签库d定义。(如果应用使用的是Servlet2.3以前)2、现在jsp中使用taglib编辑指令导入标签库,然后才可以使用标签。三、Struts2的OGNL标签:OGNL是Object Graphic Navigation Language的缩写,它是一个开源项目。Struts2框架使用OGNL作为默认的表达式语言。在传统的OGNL表达式求值中,系统会假设系统只要一个根对象,但Struts2的Stack Context需要多个“根”对象,其中ValueStacke只是多个“根”对象的其中之一。假设:使用标签OGNL表达式求值,不是用Struts2的OGNL表达式是求之。如果系统的Context中包含两个对象:foo对象,它在Context中的名字为foo;bar对象,并且它在Context中的名为bar。将foo对象设置成Context的根对象。返回foo.getBlah()方法的返回值#foo.blah返回bar.getBlah()方法的返回值#bar.blah可以看出ONGL表达式的语法非正常简洁。Struts2不知根据表达式从ValueStack中取的对象,还可以直接从对象中获取属性。Struts2提供了一个特殊的OGNL ProperAccessories(属性访问器),它可以自动搜寻栈内的所有实体(从上到下),直接找到求值表达式匹配的属性。Struts2使用标准的Context来进行OGNL表达式求值,OGNl处理的顶级对象是一个Context,这个Context对象就是一个Map类型实例,在该OGNL的Context中,有一个对象,这个根对象就是OGNL ValueStack,如果需要访问ValueStack里的属性,例如:#取出Valuestack中的bar属性:${bar};除此之外:Struts2还提供了一些命名对象,这些命名对象与根对象无关,它们只是存在于Stack Context中。所以,访问这些对象实现需要使用#前缀来指明。1、paramenters对象:用于访问HTTP请求参数,2、request对象:用于访问HttpServletRequset的属性(Attribute)的Map。例如#request.userName3、Session对象:用于访问HttpSession的属性。例如#session.userName4、Application对象:用于访问ServletContext的属性。例如#application.userName5、Attr对象:如果可以访问到,则访问PageContext,否则将依次搜索HttpServletRequset,HttpSession,ServletContext中的属性。值得注意的是:当系统创建Action实例后,该Action实例已经被保存到ValueStack中,故无需书写#即可访问Action属性。OGNL中的集合(List/Map):直接生成一个List类型的集合,该List对象中包含三个元素,都个元素之间以英文逗号隔开;例:s:set name=list value={song,li,xing} /直接生成一个Map类型的集合,该Map对象中每个Key-value对象之间以英文冒号隔开:多项之间以英文逗号隔开。例:s:set name=foobar value=#{1:song, 2:li, 3:xing} /Set标签用于蒋某个值放入指定范围:Scope:指定变量被放置的范围,该属性可以接受aplication、session、requset、page、action。如果该属性,则默认在OGNL Context中。Value:赋给变量的值,如果没有设置该属性,则将ValueStack栈顶的值付给变量。对于集合,OGNL提供了两个与元素:in和not in,其中in判断某个元素是否在指定集合中;not in则用于判断某个元素是否不在指定集合中。 in表达式: s:if test=foo in {foo,bar} 在 /s:if s:else 不在 /s:el
文档评论(0)