快速业务通道

Unmi的Struts2学习笔记(九) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
属性,默认也是取栈顶元素 -->     </s:iterator>   <!-- 迭代完成则从集合遍历的最后一个元素出栈 -->  </s:generator>   <!-- 最后,自动出栈, generator 生成的集合出栈 -->

汇编是基于寄存器操作的,而 Java 是基于栈的操作,Struts2 引入了存放在 request 中的 ValueStack 正好完美再现了 Java 的这一原始本性,并可使标签 使用更简洁,灵活。Struts2 还有很多标签也有这个特性:

1) 生成的新实例,压栈,标签结束后自动出栈

2) 在未指定数据来源时,默认从栈顶取数据。

不禁回想起 Struts1 的 <nested:root> 等 nested 标签要显示的声明 操作的根元素,是多么麻烦的一件事。

补充:如果指定了 <s:generator .../> 的 id 属性的话,同时还会把 生成的集合放到 pageContext 中,key 就是 id 指定的值。

Unmi的Struts2学习笔记(九)(3)

时间:2011-09-04 Unmi.cc 隔叶黄莺

6. <s:subset .../> 是用来取集合子集的,可从 source (未指定则为 栈顶集合) 集合的 start 位置起取 count 个元素。或者按自定义的 decider 条 件,取符合条件的子集。你的 decider 要实现 SubsetIteratorFilter.Decider 接口的 decide(object element) 方法,符合条件的返回 true。此处不列出具体 用法的实例。

7. <s:sort .../> 依据 comparator 指定的比较器,对 source (未指 定则为栈顶集合) 集合排序。排序头的集合当然也是压入栈中,标签结束自动出 栈。

8. <s:debug/> 会在页面生成一个 debug 链接,展开能看到 ValueStack 和 Stack Context 中的内容,该页面有显示用 #key 能获取到 Stack Context 中的值。<s:property .../> 在前面用很多次了,就相当 于 Struts1 的 <bean:write .../>,value 未指定,输出栈顶值;若要 输出的值为 null 时,指定了 default 属性则输出它;escape 指定是否忽略 HTML 代码,同 <bean:write .../> 的 ignore 属性。

9. <s:push .../> 用于将某个值压栈,标签结束后自动出栈,可方便 某些操作,Struts1 的 <nested:root> 有类似功能。<s:set .../> 标签用于把某个值放入指定范围内,用 scope 指定,如 application、session 、request、page、action。若未指定 scope 则放到 Stack Context 中;name 为新变量名;value 为欲处理的变量,未指定则取栈顶值。

10. 从前面的标签,你也许已经注意到,Struts2 常操作的几个数据结构有 ValueStack、pageContext 和 StackContext。例如:generator、sort、subset 等生成的新实例会压到栈顶,并在标签结束自动出栈;如果 sort、subset 未指 定 source 源集合,则从栈顶取,iterator、property 也是一样的;若为 generator 指定了 id 属性,则生的集合会存到 pageContext 中,key 就是 id 对应值;如果为 bean 指定了 id 属性,则会把 bean 实例存入到 Stack Context 中,key 就是 id 对应值,Stack Conext 中的值可以用 #key 取得。其 他标签类似的地方应该要注意到。

最后再来一贴,理解 ValueStack 和 Stack Context:

1) ValueStack 可以用 request.getAttribute("struts.valueStack") 取得 的一个 com.opensymphony.xwork2.util.OgnlValueStack 实例,它实现为一个栈 ,有 peek()、pop()、push(obj) 方法。

2) Stack Context 是在前面的 ValueStack 的上下中的一个 java.util.Stack 实例:

//stack 为 ValueStack 实例,COMPONENT_STACK="__component_stack"  // org.apache.struts2.components.Component.getComponentStack() 中的代码

  Stack componentStack = (Stack) stack.getContext().get(COMPON

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号