Struts2從一個action轉到另一個action的兩種方法

jopen 8年前發布 | 15K 次閱讀 Struts2 Web框架

          在Struts2中,Action處理完用戶請求后,將會返回一個字符串對象,這個字符串對象就是一個邏輯視圖名。Struts 2通過配置邏輯視圖名和物理視圖之間的映射關系,一旦系統收到Action返回的某個邏輯視圖名,系統就會把相應的物理視圖呈現給瀏覽者。

         

          Struts 2的結果類型決定了Action處理結束后,下一步將會調用那種視圖資源來呈現處理結果。默認是dispatcher,該結果類型指定使用JSP作為視圖資源。但是我們會有這樣的要求:要求從一個Action轉到另一個Action中去。

         

           從一個Action直接跳到另一個Action中,Struts提供了兩種結果類型可以實現:chainredirect

         

          我們從Servlet中學到重定向是不能保留參數的,也就是說重定向了,request對象就會無效了。同樣redirect就像Servlet中的重定向,它也不能夠保留request對象保存的參數。但是chain可以。所以兩種的區別就在于chain能夠保留request對象,而redirect不可以。

 

           struts.xml的配置

<package name="mystruts1" extends="struts-default" namespace="/mystruts1">
        <!-- 第一個Action -->
        <action name="test_*" class="com.action.TestAction" method="{1}">
            <result name="text_chain" type="chain">result_resultChain</result>
            <result name="text_redirect" type="redirect">result_resultRedirect</result>
        </action>

        <!-- 第二個Action -->
        <action name="result_*"  class="com.action.ResultAction" method="{1}"></action>
    </package>



          Action1:

public class TestAction {
    public String testChain(){
        HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
        request.setAttribute("param", "我是chain結果類型...");
        return "text_chain";
    }

    public String testRedirect(){
        HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
        request.setAttribute("param", "我是redirect結果類型...");
        return "text_redirect";
    }
}


 

          Action2:

public class ResultAction {

    public String resultChain(){
        HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
        System.out.println(request.getAttribute("param"));
        return null;
    }


    public String resultRedirect(){
        HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
        System.out.println(request.getAttribute("param"));
        return null;
    }
}


          部署項目后,當在瀏覽器中輸入:http://localhost:8080/struts2_01/mystruts1/result_resultRedirect.action。結果如下

          得到為null。由此可見Redirect并不能獲取request對象保存的參數。

 

          當輸入http://localhost:8080/struts2_01/mystruts1/result_testChain.action,得到如下結果:

          得到了正確的結果,所有chain可以獲得Request對象保存的參數。

          所以:

          1. 需要保存前一個action的屬性信息時使用,保存住action1的request對象: 

<result type= "chain " name="a2">action2</result>


          2. 不保存前一個action的參數可以用這種方法:

<result  type= "redirectAction "> action2</result>



 

來自: http://blog.csdn.net/chenssy/article/details/7960599

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!