有关struts2和堆栈中的valuestack的一些问题?

时间:2012-06-03 16:39:41

标签: java struts2 stack

我是struts2的新手,并且通过struts2行动,我遇到了声明,表示valuestack是对象和语句的堆栈 当具有相同属性名称的两个对象存储在值对象上时,如何进行分辨率。为了清楚这一点,我开始寻找 如何在struts2中实现它。当我进入最后一级时,我发现struts2只是简单地将对象插入push方法中的零位置 在窥视期间,它从零位置获取对象。 所以根据我在struts2下的理解,值栈只包含一个对象(那将是 行动对象)。那是对的吗?如果它不正确我们何时可以使用除了操作对象之外我们可以在valuestack中存储多个对象?

当我在http://en.wikipedia.org/wiki/Stack_(abstract_data_type处通过堆栈时,我想到了关于堆栈的一些基本问题。据说 在计算机科学中,堆栈是一种后进先出(LIFO)抽象数据类型和线性数据结构,其特点是两个基本操作,称为推送和弹出 。我同意涉及推送和弹出操作的数据结构对堆栈进行分类。但是对LIFO的东西产生怀疑。当我在java中看到数组实现时(即 也是堆叠并在同一链接上声明),根据我的理解,它不遵循LIFO,因为我们可以通过索引访问任何元素而不是最后一个元素 必须出来。如果我错了,请不要激怒我,因为这是我的符号。 如果这是正确的,我们可以说堆栈不一定是必须的LIFO只有它应该确认推送和弹出操作吗?

1 个答案:

答案 0 :(得分:6)

不,在几乎所有情况下,值堆栈都不会包含单个对象,如果允许单个对象,它就不会是堆栈。

当您在位置0 插入一个对象时,它是一个推 - 先前位置0的对象将位于位置1,等等。这是正常推送,使用{{1}方法。

基本上所有正常的动作调用都会在堆栈上有多个对象。使用insert标记(下图)或转储堆栈可以轻松证明这一点。此外,<s:push> tag将在JSP页面上向堆栈添加对象,拦截器可以添加对象等。

您对堆栈LIFO的观察很有意思,但最终无关紧要:正常的堆栈操作(推送,弹出)是LIFO的原因。这并不妨碍堆栈实现提供其他访问模式。


debug tag value stack dump