以下是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
置于值堆栈还是堆栈的上下文中? (我正在将堆栈上下文作为操作上下文吗?)
如果在值堆栈上,那么为什么我们将计数器变量与#
一起引用为#
用于引用操作上下文中的值而不是值堆栈。对?
答案 0 :(得分:0)
错误。
“应用程序上下文”纯粹是一个servlet spec工件,与OGNL #
字符没有直接关系。 OGNL的#
允许我们访问命名值栈值,而不是遍历值栈,直到找到适当的值。
说“[...] id已被设置为值counter
”也是不准确的。 counter
是值堆栈中的命名值。我认为值堆栈是上下文和堆栈的组合 - 有一个堆栈,但是还有一些命名值不在堆栈上,例如#attr
。
我也不认为将它称为“动作上下文”是准确的,因为它在Struts 2应用程序的上下文中具有特定含义,并且实际上仅对Java源代码有意义。
这是一个简单的“值堆栈”,它包含一个堆栈和命名值。