s:bean标签如何在struts 2中运行?

时间:2012-07-02 05:33:07

标签: java struts2

以下是bean tag docs

中的示例
<s:bean name="org.apache.struts2.example.counter.SimpleCounter" var="counter">
  <s:param name="foo" value="BAR" />
  The value of foot is : <s:property value="foo"/>, when inside the bean tag <br />
</s:bean>

然后是解释:

  

此示例实例化一个名为SimpleCounter的bean并设置foo属性(setFoo('BAR'))。然后将SimpleCounter对象推送到值堆栈,这意味着我们可以使用属性标记调用其访问器方法(getFoo())并获取它们的值。

在上面的示例中,id已设置为counter的值。这意味着SimpleCounter类将被放入堆栈的上下文中。您可以使用Struts标记访问SimpleCounter类:

<s:property value="#counter" />

我的问题是,如果我在bean标记中提到属性var,会将SimpleCounter置于值堆栈还是堆栈的上下文中? (我正在将堆栈上下文作为操作上下文吗?)

如果在值堆栈上,那么为什么我们将计数器变量与#一起引用为#用于引用操作上下文中的值而不是值堆栈。对?

1 个答案:

答案 0 :(得分:0)

错误。

“应用程序上下文”纯粹是一个servlet spec工件,与OGNL #字符没有直接关系。 OGNL的#允许我们访问命名值栈值,而不是遍历值栈,直到找到适当的值。

说“[...] id已被设置为值counter”也是不准确的。 counter是值堆栈中的命名值。我认为值堆栈是上下文和堆栈的组合 - 有一个堆栈,但是还有一些命名值不在堆栈上,例如#attr

我也不认为将它称为“动作上下文”是准确的,因为它在Struts 2应用程序的上下文中具有特定含义,并且实际上仅对Java源代码有意义。

这是一个简单的“值堆栈”,它包含一个堆栈和命名值。