Struts2中的ValueStack如何工作?

| 考虑下面的代码。
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中访问它时,上面的哪个属性将在值堆栈中?它是否像普通堆栈一样工作,即,继续推送其读取的任何属性?     
已邀请:
我认为您对此感到困惑:Struts2放入堆栈的不是属性,而是保存这些属性的对象。 假设您在jsp中写了
 <s:property value=\"xxx\" />
然后Struts2将在您的堆栈中进行迭代以查找具有属性
xxx
的对象,即具有公共方法
getXxx()
的类。 Struts2将您当前的动作(
SampleAction
的实例)放在堆栈的顶部。因此,它将首先搜索
SampleAction.getXxx()
方法-如果未找到,它将在堆栈中进一步查找。 (实际上,您可以将其他对象放在Action上方的堆栈中-也许放在同一jps中,但要使其保持简单)。 然后,在您的示例中,所有的
sampleArray1 sampleArray2 lst
(如果有公共获取者)将在jsp中可用。但是并不是
sampleArray1
是“在堆栈中”(甚至更少的元素!),动作在堆栈中。 因此,例如,您可以编写:
<s:iterator value=\"sampleArray1\">
  <p>item is: <s:property/></p>
</s:iterator>
在第一行中,在操作中(即堆栈中)找到了“ 7”属性。然后,迭代器标记将每个值放在值堆栈顶部的sampleArray1内,并在第二行中将其抓取并打印。     
价值栈 Struts-2使用值堆栈来存储重要对象。 ActionInstance和成员变量存储在值堆栈中,JSP可以通过值堆栈访问它。 注意:值堆栈的行为类似于虚拟对象。 如果两个成员变量具有相同的名称,那么值堆栈如何处理冲突? 值堆栈接收对成员变量的请求,然后如果成员变量名称匹配,则从头到尾进行搜索,然后将值发送给JSP。为了访问特定的成员变量,我们必须访问或遍历对象图。     

要回复问题请先登录注册