繁体   English   中英

数据如何在Struts2中传播?

[英]How data travels in Struts2?

我试图理解Struts2中的数据路径,如何将数据放在ValueStack上? 如何找出ValueStack中当前存在的对象? 我可以从不同的范围应用程序,会话,请求,页面访问哪些其他数据? 如何确定我的变量应具有的范围?

那是很多问题。

值栈只是一种数据结构,是地图和堆栈的组合。 命名对象(通过OGNL中的#标签访问)在地图中(比如请求范围),搜索属性/方法的对象在堆栈中。

<s:debug>标记是查找值堆栈中的内容的最简单方法。 您还可以使用JSP中的“裸”数组表示法访问堆栈中的任意对象,例如"[0]"是最顶层的对象, "[1]"是下一个,等等。这几乎不是一个好主意。现实生活。

您可以访问每个范围中的任何内容。

您自己的对象几乎总是通过动作本身放置在值堆栈上,或者如果您通过模型实现ModelDriven 除此之外,它与任何其他Java EE应用程序相同 - 客户端会话期间所需的对象应该在会话范围内,应用程序中共享的对象应该在应用程序范围内等。

值栈本身位于请求范围内。

我将专门解决“数据如何传播”元素以及ValueStack的堆栈性。 至于关于什么数据可用的位,可以随着上下文而改变;拥有“堆栈”的全部意义是支持范围内数据的上下文变化。 此外,堆栈上的特定数据可以通过参考资料更好地覆盖,例如struts网站上的参考资料。

Struts 2具有非常干净的架构。 它可以很好地将软件的关注点分成不同的组件。 其中一个主要的标志是行动是一个POJO。 作为一个极端,该行动的主要职责是携带数据。 它是主要的数据传输对象; 它的属性接收传入的请求数据,前提是命名所有排队。 移动数据和考虑何时移动数据的任务被捕获在另一个组件中:拦截器。

数据在ValueStack上的移动几乎完全由拦截器完成。 处理请求时框架首先要做的事情之一是将新创建的操作对象放在valuestack的顶部。 这支持OGNL访问您的操作属性。 然后,拦截器将数据移动到valuestack,并且由于您的操作在那里,它的属性将接收匹配的setter上的数据。 其他拦截器也会以类似的方式将内容移动到valuestack,例如验证拦截器; 如果他们发现错误,那么该错误消息也会进入堆栈。

除了作为集中式数据容器之外,ValueStack当然也是一个堆栈。 当您考虑迭代器标记之类的东西时,这种堆栈性允许堆栈顶部的属性隐藏堆栈中较低的属性。 例如,如果迭代一组用户,每个用户都会进入堆栈顶部并在迭代体内保持不变。 这允许您的OGNL属性引用依次命中每个用户的属性。 更重要的是,如果在堆栈中找到了具有类似命名属性的其他内容,则顶部的用户对象将隐藏它。 请注意,考虑到这一点,push标签允许您将任何您喜欢的对象推送到堆栈中,在您需要强制使用自己的上下文时提供了很好的灵活性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM