天天看點

struts Value Stack 值棧

    通過對struts2的一段時間的接觸,将自己對OGNL的核心值棧說說。值棧:簡單的說,就是存放action的堆棧,當我們送出一個請求道server端 action時,就有個堆棧,假設action在server端進行跳轉,全部action共用一個堆棧,當須要儲存在action中的資料時,首先從棧頂開始 搜尋。若找到同樣的屬性名(與要獲得的資料的屬性名同樣)時,即将值取出。但這樣的情況可能出現找到的值不是我們想要的值。那麼解決此問題須要用TOP文法 和N文法來進行解決。

    當在客服端進行跳轉時。當有請求送出到server的action時,僅僅有一個堆棧存在,堆棧中存放的是目前的請求的action。而原來那麼則銷毀了(本人觀 點,感覺如同request請求一樣)。 

  衆所周知。Struts2的Action類通過屬性能夠獲得全部相關的值,如請求參數、Action配置參數、向其它Action傳遞屬性值(通過chain結果)等等。要獲得 這些參數值,我們要做的唯一一件事就是在Action類中聲明與參數同名的屬性,在Struts 2調用Action類的Action方法(預設是execute方法)之前,就會為對應的Action屬性指派。

  要完畢這個功能,有非常大程度上。Struts 2要依賴于ValueStack對象。這個對象貫穿整個Action的生命周期(每一個Action類的對象執行個體會擁有一個ValueStack對象)。當 Struts 2接收到一個.action的請求後,會先建立Action類的對象執行個體。但并不會調用Action方法。而是先将Action類的對應屬性放到 ValueStack對象的頂層節點(ValueStack對象相當于一個棧)。僅僅是全部的屬性值都是預設的值。如String類型的屬性值為 null,int類型的屬性值為0等。