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


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;  
        }  
    }  

 所以:

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

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


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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM