首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Struts2中的ValueStack是如何工作的?

Struts2中的ValueStack是如何工作的?
EN

Stack Overflow用户
提问于 2011-04-15 20:02:54
回答 2查看 4.3K关注 0票数 0

考虑下面的代码。

代码语言:javascript
复制
public class SampleAction {
  private  String[] sampleArray1 = new String[]{"item1","item2","item3"};
  private  String[] sampleArray2 = new String[]{"a","b","c"};
  private List lst = new ArrayList();
  lst.add(1)
  lst.add(2)
  //Getters and setters
}

现在,当我们尝试在JSP中访问这些属性时,上面的哪些属性会出现在值堆栈中?它是不是像普通的堆栈一样工作,比如,不管它读取什么属性,都要继续推送?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-15 23:35:19

我认为您混淆了这一点: Struts2放在堆栈中的不是属性,而是保存这些属性的对象。

让我们假设您在jsp中编写了

代码语言:javascript
复制
 <s:property value="xxx" />

然后,Struts2将在堆栈中迭代,以找到具有属性xxx的对象,即具有公共方法getXxx()的类。Struts2会将当前操作(SampleAction的一个实例)放在堆栈的顶部。因此,它将首先搜索SampleAction.getXxx()方法-如果没有找到,它将向下查找堆栈。(实际上,您可以将其他对象放入堆栈中,放在同一个jps中的动作-perhaps之上-但要保持简单)。

然后,在您的示例中,所有sampleArray1 sampleArray2 lst (如果它们具有公共getter)将在jsp中可访问。但这并不是说sampleArray1“在堆栈中”(更不用说它的元素了!),而是动作在堆栈中。

例如,你可以这样写:

代码语言:javascript
复制
<s:iterator value="sampleArray1">
  <p>item is: <s:property/></p>
</s:iterator>

在这里,第一行中的sampleArray1属性位于操作中,也就是在堆栈中。然后,迭代器标记将每个值放在值堆栈顶部的sampleArray1中,并在第二行中抓取并打印。

票数 7
EN

Stack Overflow用户

发布于 2017-10-02 17:31:39

值堆栈

Struts-2使用值栈来存储重要的对象。ActionInstance和成员变量存储在值堆栈中,可以通过值堆栈进行访问。

注意:值堆栈的行为类似于虚拟对象。

如果两个成员变量具有相同的名称,值堆栈如何处理冲突?JSP值堆栈接收成员变量的请求,然后从第一个到最后搜索,如果成员变量名称匹配,则将值发送到。对于要访问的特定成员变量,我们必须访问或遍历对象图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5676412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档