1. 程式人生 > >自學SSH框架之---struts(七):ActionForward詳細介紹

自學SSH框架之---struts(七):ActionForward詳細介紹

    之前說了很多關於actionForm的內容,今天就來講解下struts種另一個比較重要的內容actionForward,相信通過前面的學習,大家對actionForward已近不陌生了,這篇文章就是來系統講解一下actionForward的。

    actionForward的作用:封裝轉發路徑,通俗點說就是說完成頁面的跳轉和轉向。那它既然是轉向,到底是轉發還是重定向呢?預設的情況下,actionForward採用的是轉發的方式進行頁面跳轉的。

    我在這裡再囉嗦一下吧,也給自己加深下印象,說一下轉發和重定向的區別。最大的區別就是轉發的時候,頁面的url地址不變,而重定向的時候頁面的url地址會發生變化。簡單說明一下原因,因為轉發的時候是採用的一個request(請求),既然頁面跳轉前後是同一個request,頁面url當然不會變了;而重定向採用的是2個request,頁面跳轉前後的url當然會不同了。

    好,說到這,大家會問,既然actionForward跳轉的方式預設的是轉發,那如果我非要用重定向的方式,該如何設定呢?恩,這很簡單,大家都在struts-config.xml坐過actionForward的配置吧,比如這句    <forward name="login" path="/login.jsp" redirect="true"/>

其實通常我們都沒寫redirect屬性,而是採取的是它的預設值false,表示的是轉發,如果設定為true,即為重定向。

    下面再說一下全域性和區域性ActionForward的概念。在程式設計的時候,我們有時候會遇到這種情況,當增加一條記錄成功時,跳轉到成功頁面,在struts-config.xml我們做對“增加”這個action加一個<forward name="success" path="/login_success.jsp"/>;在修改一條記錄成功時,我們也會跳轉到成功頁面,在struts-config.xml我們做對“修改”這個action加一個<forward name="success" path="/login_success.jsp"/>;而同樣當刪除一條記錄成功時,跳轉到成功頁面,在struts-config.xml我們又對“刪除”這個action加一個同樣的<forward name="success" path="/login_success.jsp"/>;相信大家會對同樣的程式碼重複的寫幹到反感吧,那有沒有辦法解決呢?有,那就是全域性ActionForward,針對上面這種情況,我們在<action-mappings>標籤的上面加上

 

    上面就是對全域性ActionForward的一種配置,而我們之前寫的那些就是區域性ActionForward。那麼如果區域性ActionForward和全域性ActionForward同時出現,到底是按照哪個配置進行頁面跳轉呢?規則很簡單,採用的是就近原則,就是說如果有區域性ActionForward,就按照區域性ActionForward就行跳轉,如果沒有就按照全域性的跳轉。

    相信有的朋友會說,我怎麼不早說,ActionForward還可以設定重定向的跳轉方式,然後他還不想對原來的struts-config.xml檔案進行修改,想在寫的java檔案的action中改,如下

這樣當然也是可以的啦,不過記住要重啟伺服器,因為struts-config.xml檔案不允許動態修改。

    我還想說明一點的是,我們也可以不依賴struts的ActionForward進行轉向,不要學了一樣,忘了之前學的,之前我們都是通過response進行轉向的,在struts中,我們當然也可以,在action中覆寫execute方法,如下:

注意:return null是必須的。

    下面在介紹下動態ActionForward,動態的ActionForward是可以執行期修改的。有這麼個場景:頁面有一個輸入域,我輸入1的時候,跳轉到1的頁面,輸入2跳轉到2的頁面,我們利用之前學過的知識來實現下,先配置下XML:

    jsp頁面如下:

    java action如下:

    相信這對大家來說是小菜一碟啦,但是如果我想在此基礎上實現當我輸入3,跳轉到3的頁面,輸入4,5,。。。以此類推下去,怎麼辦呢,如果還是採用這種方式,很麻煩吧,改動的太多啦。此時我們可以考慮採用動態ActionForward,說白了就是我們自己構造一個ActionForward,通過new的方式,看一下改後的action

    之後,再把XML中的<forward name="page1" path="/page1.jsp"/>,<forward name="page2" path="/page2.jsp"/>刪除即可。大家還會發現動態ActionForward還有個好處,就是可以跟引數,此例中傳遞了name=tom的引數。

    好了,ActionForward就介紹完了,下次會說點啥嘞,to be continued 嘍