1. 程式人生 > >struts與ognl結合中引數接受的方式

struts與ognl結合中引數接受的方式

在引數接受的時候,有三種方式:屬性驅動、物件驅動、模型驅動 在模型驅動中,為了實現模型驅動只需在賦值前,將接受引數的物件壓入棧即可 其模型驅動的流程圖 在這裡插入圖片描述 從裡面可以看出,在賦值前需要賦值所以我們需要在攔截器之前實現接受的引數壓入棧頂。,從params攔截器從看出在action之前。開啟專案下的Libraries/Web App Libraries/struts2-core-2.3.24.jar下的struts-default.xml檔案,裡面配置了struts2預設的21種攔截器。如圖 在這裡插入圖片描述 找到引數接受的攔截器params,在這裡我們需要在params上面完成壓棧的動作,在這裡面有一個準備攔截器prepare,在很多其他攔截器開始之前做好準備工作。找到prepare攔截器的原始碼,看其如何去實現這些準備工作,還是在struts-default中找到其原始碼的位置 在這裡插入圖片描述

在裡面ctrl+shift+t,查詢原始碼找到doIntercept方法 在這裡插入圖片描述 根據該方法的流程步驟可以看出先獲取action物件,然後判斷該action物件是否屬於prepareable介面的型別,如果是的話,action會強轉為prepareable介面的型別。呼叫prepare方法。如果要做準備工作,可以讓action去實現prepareable介面,這樣攔截器就會呼叫prepare方法。 在action中實現prepareable介面,並呼叫prepare方法,在該方法裡面實現 public void prepare() throws Exception { //壓入棧頂 //1獲得值棧 ValueStack vs = ActionContext.getContext().getValueStack(); //2將u壓入棧頂 vs.push(u); } 這樣在進行引數賦值的時候就會接受傳輸的引數而不為null。

還有一種方法是實現modeldriven介面,一樣的和上面的看方法一樣可以去檢視其是如何實現的。