考虑下面的代码。
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中访问这些属性时,上面的哪些属性会出现在值堆栈中?它是不是像普通的堆栈一样工作,比如,不管它读取什么属性,都要继续推送?
发布于 2011-04-15 23:35:19
我认为您混淆了这一点: Struts2放在堆栈中的不是属性,而是保存这些属性的对象。
让我们假设您在jsp中编写了
<s:property value="xxx" />然后,Struts2将在堆栈中迭代,以找到具有属性xxx的对象,即具有公共方法getXxx()的类。Struts2会将当前操作(SampleAction的一个实例)放在堆栈的顶部。因此,它将首先搜索SampleAction.getXxx()方法-如果没有找到,它将向下查找堆栈。(实际上,您可以将其他对象放入堆栈中,放在同一个jps中的动作-perhaps之上-但要保持简单)。
然后,在您的示例中,所有sampleArray1 sampleArray2 lst (如果它们具有公共getter)将在jsp中可访问。但这并不是说sampleArray1“在堆栈中”(更不用说它的元素了!),而是动作在堆栈中。
例如,你可以这样写:
<s:iterator value="sampleArray1">
<p>item is: <s:property/></p>
</s:iterator>在这里,第一行中的sampleArray1属性位于操作中,也就是在堆栈中。然后,迭代器标记将每个值放在值堆栈顶部的sampleArray1中,并在第二行中抓取并打印。
发布于 2017-10-02 17:31:39
值堆栈
Struts-2使用值栈来存储重要的对象。ActionInstance和成员变量存储在值堆栈中,可以通过值堆栈进行访问。
注意:值堆栈的行为类似于虚拟对象。
如果两个成员变量具有相同的名称,值堆栈如何处理冲突?JSP值堆栈接收成员变量的请求,然后从第一个到最后搜索,如果成员变量名称匹配,则将值发送到。对于要访问的特定成员变量,我们必须访问或遍历对象图。
https://stackoverflow.com/questions/5676412
复制相似问题