使用者每次訪問struts的action,都會建立乙個action物件、值棧物件、actioncontext物件;然後把action物件放入值棧中; 最後再把值棧物件放入request中,傳入jsp頁面(key: struts.valuestack)。
值棧的記憶體結構分為:
map棧:
request
session
list棧:
action及全域性物件
我們只需要通過actioncontext物件就可以訪問struts的其他的關鍵物件。
public class ognldemo2 extends actionsupport
public void setuser(user user)
@override
public string execute() throws exception
}
struts會將全域性屬性及action物件放入根元素中即list棧,如圖:
以下方法可以操作該棧物件
vs.push(new user(101, "asen"));//可以list棧頂新增物件
vs.pop();//可以移除list棧頂物件
vs.set("new_user", new user(222, "ronaldo"));//也可以往list棧新增元素
可以向map棧(ognlcontext)新增物件
從這個table裡可以找到:
user1=com.asen.test4.entity.user@7dbeb971
session=
綜上所述:
actioncontext.getcontext().put(string key, object value)放入map棧(ognlcontext)
actioincontext.getcontext().getvaluestack().push(object value)放入list棧
在jsp頁面我們可以通過struts標籤獲取值棧裡的物件
對於map棧的資料,加#號訪問
ognl表示式對於list棧的資料直接根據key值提取value值就可以了
還可以用
以上是前端頁面獲取到資料,接下來是前端頁面提交資料到伺服器,伺服器接收資料
假如有乙個用來處理客戶的 customeraction 類, 該動作類實現了 modeldriven 介面,當使用者觸發customeraction 動作時, modeldriven ***將呼叫相關customeraction 物件的 getmodel() 方法, 並把返回的模型(customer例項)壓入到 valuestack 棧. 接下來 parameters ***將把表單字段對映到 valuestack 棧的棧頂物件的各個屬性中. 因為此時 valuestack 棧的棧頂元素是剛被壓入的模型(product)物件, 所以該模型將被填充. 如果某個欄位在模型裡沒有匹配的屬性, param ***將嘗試 valuestack 棧中的下乙個物件.
department department = new department();
/*** 把model的值賦值給了department
*/beanutils.copyproperties(this.getmodel(), department);
struts2 OGNL 值的訪問
前言我覺得首先需要事先了解一下ognl,在開始struts2值棧 struts2值棧 onglvaluestack onglvaluestack 有兩部分,一部分是繼承arraylist實現的乙個棧結構,乙個就是在 contextmap詳解 中介紹過的contextmap。第一部分 valuesta...
struts2 0中ognl棧的解析
ongl詳解 valuestack是struts2的乙個介面,字面意義為值棧,ognlvaluestack是 valuestack的實現類,客 戶端發起乙個請求,struts2架構會建立乙個action例項同時建立乙個ognlvaluestack值棧例項,ognlvaluestack貫穿整個acti...
struts2中根物件以及ognl
struts2中的ognl表示式語言是對xwork的ognl的封裝。我們要理解一下幾點 1 struts2中將actioncontext作為ognl的上下文環境 actioncontext內部含有乙個map物件 2 struts2中的 ognl表示式語言的根物件是乙個valuestack value...