下面是來自bean tag docs的例子:s:bean標籤如何在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>
那麼這裏的解釋是:
此示例實例化一個名爲
SimpleCounter
豆並設置foo
屬性(setFoo('BAR')
)。然後將SimpleCounter
對象推送到值棧上,這意味着我們可以使用屬性標記調用其訪問器方法(getFoo()
)並獲取它們的值。
在上面的例子中,id已經被設置爲計數器的值。這意味着SimpleCounter
類將被放入堆棧的上下文中。
<s:property value="#counter" />
我的問題是,如果我提到屬性VAR在bean標籤,將SimpleCounter
放在值棧或堆的上下文:您可以使用Struts標籤訪問SimpleCounter
類? (我正在將堆棧上下文作爲操作上下文的權利?)
如果在值堆棧上,那麼我們如何引用計數器變量#
,因爲#
用於引用來自操作上下文的值而不是值堆棧。對?
嗨戴夫抱歉,我的意思是行動上下文,而不是應用程序上下文。更正了我原來的帖子。你說過「OGNL的#允許我們訪問命名的值棧值」如果這是正確的,我也看到#session.user.name其中會話不在價值堆棧,但在行動上下文。同樣在#attr中,attr位於動作上下文中。根據上述研究結果,外觀#用於查找動作上下文,如果我們沒有提及#,它將查找值棧。整個混淆是在語句「這意味着SimpleCounter類將被放置到堆棧的上下文中」字段堆棧的上下文的bcoz –
@MSach否,'#session'是放入值堆棧上下文中的命名值。堆棧值*來自*的地方不相關。 '#'是用來引用值棧的上下文值,就像那句話所說的那樣 - 它和操作上下文不一樣。 OGNL存在於Struts 2之外。 –