0

考虑以下代码。

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 中访问它时,上面的哪些属性将在值堆栈中?它是否像普通堆栈一样工作,即继续推送它读取的任何属性?

4

2 回答 2

7

我认为您对此感到困惑: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>

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

于 2011-04-15T15:35:19.220 回答
1

价值栈

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

注意:值堆栈表现为虚拟对象。

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

于 2017-10-02T09:31:39.100 回答