struts2的action之間的引數傳遞

2021-09-30 08:17:59 字數 1335 閱讀 2366

action的預設結果型別是dispatcher,而action之間傳送請求是不能直接用該結果型別的。一般來說,可選的結果有redirect、redirect-action、chain。前兩種都是屬於頁面跳轉,也就是說,傳送請求以後,位址列的位址會重新整理為被請求的action的位址,而chain則不會更新位址。

redirect:「呼叫方法來轉到指定的位置。http響應被告知使瀏覽器直接跳轉到指定的位置(產生客戶端的乙個新請求). 這樣做的結果會使剛剛執行的action(包括action例項,action中的錯誤訊息等)丟失, 不再可用。」

簡單說,兩者的共同點是,位址列會變化,所有前乙個action的請求引數都會丟失,當然也包括action的屬性值也會丟失。路徑寫法稍有不同,redirect-action請求下乙個action時,不帶字尾.action,而redirect和普通url寫法一致。redirect-action支援param來附加請求引數,但是這往往會導致servletactionredirectresult報找不到***屬性的警告,這大概是由於無法識別是ioc注入,還是引數附加url導致的,雖然是warn級別,不過寧可寫成***?a=x&b=y的形式,而&還需要寫作&的格式,否則會報xml格式錯誤。(另外,這種url形式,作為param的actionname的值也是可以正常使用的)

chain:相當於是forward,首先表現為位址列不會改變,類似dispatcher,同時,它的特點是能夠在多個action中共享表單傳遞過來的資料,同時,按照action鏈的順序,相關action的屬性值也會傳遞下去,這表示在最後的檢視頁,你可以得到前面所有action的屬性值(如果有get方法的話)。對於多個action具有相同屬性值的話,後續action會先使用前面的action的資料來進行賦值,然後再進行邏輯處理並傳遞下去。

看起來是很完美,可是卻有很大的問題。如果後面的action需要呼叫前面action的屬性值,他得保證具有同樣的屬性值,否則你無法接收到前面action的值。他無法像redirect-action一樣通過附加引數獲取,他不支援***?a=x&b=y的形式。這將導致很大的耦合性和無效引數的氾濫,無法通過配置檔案傳遞引數也很麻煩。

另外,很困擾的一點就是,如果在action鏈靠前的action方法內出現錯誤(如action的haserror方法返回true)或者發生異常,他就會強迫你定義input結果,包括後面的action也要定義,否則就會報錯。而實際上,即使符合了以上條件,他仍不會執行後面的action,而是直接跳到後面的action的input檢視。除非發生錯誤的action返回input,並且type為「chain」,並且後乙個action的方法必須為input,否則後續方法不會執行,而直接定位到了最後的物理檢視。

個人覺得chain的適用範圍變的十分窄,據說webwork2已經不提倡使用chain。

Struts 2 之Action類詳解

1.action類 從form bean中取出表單資料 string username loginform.getusername string password loginform.getpassword 生成乙個session物件 生成乙個arraylist物件,並把使用者名稱和密碼的值寸入該物...

Struts2之action接收請求引數

1.採用基本型別接受請求引數 get post action public class getparamaction extends actionsupport public void setname string name public int getage public void setage ...

struts2中之action返回結果

action返回結果的四種方式 1.action方法返回乙個字串 這個返回的字串與 struts.xml 的乙個 action配置相匹配。2.使用code behind外掛程式 當使用這個外掛程式的時候,它會將 action的名字和action返回的結果字串進行連線來得到檢視模 板。比如說,如果ur...