Struts2中的OGNL表达式.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Struts2中的OGNL表达式

浅析值栈ValueStack对象相当于一个栈,它贯穿整个Action的生命周期,每个Action类的对象实例都会拥有一个ValueStack对象当Struts2接收到一个*.action请求后,并不是直接调用Action方法,而是先将Action类的相应属性放到ValueStack对象的顶层节点值栈也位于内存中,它也是和parameters、request、session、application、attr对象放在一起的值栈属于ONGL Context里面的根对象。也就是说它位于整个内存中最最重要的地方,所以叫根对象根对象和另外五个对象是有区别的,根对象可以省写#号,比如s:property value=user.username/值栈的生命周期与request请求相关,每次请求产生一个值栈。默认所有的Action会被自动放到值栈里服务器跳转时共用值栈假设从一个Action11通过服务器跳转到Action22的话,就意味着这两个Action是共享一个值栈的,因为一次请求只使用一个值栈这时内存中情况是这样的:首先接收到Action11请求后,会产生一个值栈,在栈顶存放Action11对象以及它所有的属性然后经过服务器跳转到Action22,这时就会把Action22对象压入值栈的栈顶位置,此时Action11对象以及它的所有属性就位于栈底了取值过程栈的特征是后进先出。于是首先到栈顶的对象里查找是否存在这个属性,如果栈顶的Action22对象中不存在这个属性的话它就会继续向下寻找直至栈底对象,一直查找是否存在这个属性如果最后找到该属性的话,那么就会在JSP页面中通过s:property value=username/输出属性值如果在Action22和Action11都有一个同名的同类型的username属性的话,那么将输出Action22中的属性值因为它是先从栈顶开始寻找属性的,值栈的特征就是后进先出,但有个前提:请求过程是通过服务器跳转的三个语法假设此时想要获取Action11中的username属性的话,就可以使用值栈的Top语法或者N语法使用Top语法获取值栈中的第二个对象的属性:s:property value=[1].top.username/使用 N 语法获取值栈中的第二个对象的属性:s:property value=[1].username/另外值栈还有一个@语法,例如使用@语法调用Action中的静态方法:s:property value=@vs@getVOMethod()/@vs@get()等价于@vs1@getVOMethod(),指的是栈顶对象的静态getVOMethod()方法同理@vs2@getVOMethod()就是取值栈中第二个对象的静态getVOMethod()方法客户端跳转时使用各自的值栈假如中间某一个步骤中出现了客户端跳转的话,那么两个Action所使用的就是两个不同的值栈了所以在Action22中就不能再使用Action11中的属性了,在最后跳转到的JSP页面中也就无法获取Action11的属性了也即从Action22跳转到JSP页面时使用的是redirect的话,那么最后值栈中是没有任何的Action对象的这个时候我们可以通过链接传参,比如result type=redirecttest.jsp?netname=${username}/result意思就是取出Action22中的username属性作为参数,通过浏览器地址栏传递到JSP页面中然后使用OGNL中的#号获取Paraments对象的属性,即s:property value=#name/就可以取到值了手工向值栈中压入对象正常情况下值栈保存的是Action对象,而我们也可以直接往值栈中添加其它对象,这时可以在Action中添加如下代码向值栈中添加对象:ActionContext.getContext.getValueStack().push(new Student(沈浪,22));而且我们手工往值栈中添加的Student对象会位于栈顶。这是因为Struts2会首先初始化Action,然后才能调用它的方法初始化Action的时候,便把Action放到值栈中了,然后在执行它的execute()方法时,就又往值栈中添加了Student对象浅析OGNLOGNL是Object-Graph Navigation Language的缩写,是一种功能强大的表达式语言通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能OGNL用得最多的地方就是和Struts2的标签绑定,也可以在配置文件中通过${}使用OGNL表达式OGNL中$号的使用1..在国际化资源文件中,引用OGNL表达式2..在stru

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档