Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java s:bean标记在Struts2中是如何工作的?_Java_Struts2 - Fatal编程技术网

Java s:bean标记在Struts2中是如何工作的?

Java s:bean标记在Struts2中是如何工作的?,java,struts2,Java,Struts2,以下是来自以下方面的示例: 我的问题是,如果我在bean标记中提到属性var,会将SimpleCounter放在值堆栈还是堆栈的上下文中?(我将堆栈上下文作为操作上下文,对吗?) 如果是在值堆栈上,那么为什么我们用#引用计数器变量,因为#用于引用操作上下文中的值,而不是值堆栈中的值。对吧? 错了 “应用程序上下文”纯粹是一个servlet规范工件,与OGNL字符没有直接关系。OGNL的#允许我们访问命名的值堆栈值,而不是遍历值堆栈直到找到合适的值 说“[…]id已设置为计数器的值””也是不准确的

以下是来自以下方面的示例:

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

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

错了

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

说“[…]id已设置为
计数器的值”
”也是不准确的<代码>计数器是值堆栈中的命名值。我认为值堆栈是上下文和堆栈的组合——有一个堆栈,但也有不在堆栈上的命名值,例如,
#attr

我也不认为将其称为“操作上下文”是准确的,因为它在Struts 2应用程序的上下文中有特定的含义,并且实际上只有在Java源代码方面才有意义


这是一个简单的“值堆栈”,其中包括一个堆栈和命名值。

嗨,Dave,对不起,我指的是操作上下文,而不是应用程序上下文。更正在我原来的帖子。您说过“OGNL的#允许我们访问命名的值堆栈值”如果这是正确的,我还看到了#session.user.name,其中session不在值堆栈中,而是在操作上下文中。同样在#attr中,attr取决于动作上下文。根据上述发现,looks#用于查看动作上下文,如果我们不提及#,它将查看值堆栈。在语句“这意味着SimpleCounter类将被放置到堆栈的上下文中”中,整个混乱是单词堆栈上下文的bcoz@MSach No,
#session
是放置到值堆栈上下文中的命名值。堆栈值的来源与此无关<代码>#用于引用值堆栈上下文值,就像那句话所说的——这与操作上下文不同。OGNL存在于Struts 2之外。
<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>
<s:property value="#counter" />