Posted on 2007-07-06 17:48
oxl 閱讀(1102)
評(píng)論(0) 編輯 收藏 所屬分類:
技術(shù)感語(yǔ)
跟著《Webwork in Action》學(xué)到了OGNL,一直對(duì)ValueStack的概念很模糊,而書(shū)里也沒(méi)有介紹清楚,我一直以來(lái)連ValueStack里Action是在棧頂呢還是在哪里一層都不清楚,怎么把一個(gè)自定義的對(duì)上push到ValueStack上,如果在action的execute中push,他是在棧頂呢,還是次于Action呢?
其實(shí)在WW中,ValueStack的棧結(jié)構(gòu)是這樣的,在執(zhí)行Action之前把Action壓入棧,這時(shí)Action就是棧頂,然后在Action.execute()時(shí)再把自定義的bean壓入棧,那么這時(shí)這個(gè)自定義的bean就在棧頂了。所以在下面這樣的JSP代碼中,是先從自定義bean查起,然后才到Action。
<ww:property value="name" />
在ActionContext上下文中,默認(rèn)是從OgnlValueStack去查找,因?yàn)檫@樣,所以在在查找OgnlValueStack的值時(shí)是不用#來(lái)標(biāo)明它所在的值棧。而像Session和Application這樣的Map,則需要前綴,像這樣:#session.xxx,#application.xxx。
至于怎么在ActionContext中添加類似于Session的Map,只有一個(gè)方法就是調(diào)用put方法。
講得很粗略,不過(guò)內(nèi)里已經(jīng)了清楚了。