【struts2】名為chain的ResultType


  1)基本使用

  名稱為“chain”的ResultType,在struts-default.xml里的配置如下:

<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>

  chain是一種特殊的視圖結果,用來將Action執行完之后鏈接到另一個Action中繼續執行,新的Action使用上一個Action的上下文(ActionContext),數據也會被傳遞。

  這在實際開發中,也是經常用到的一種ResultType。比如我們在Servlet開發中,一個請求,被一個Servlet處理過后,不是直接產生相應,而是把這個請求傳遞到下一個Servlet繼續處理,直到需要的多個Servlet處理完成后,才生成響應返回。同樣的,在Struts2開發中,也會產生這樣的需要,一個請求被一個Action處理過后,不是立即產生響應,而是傳遞到下一個Action中繼續處理。那么這個時候,就需要使用chain這個ResultType了。

  來示例一下,先看看第一個Action,就用HelloWorldAction吧,稍微簡化一下,示例如下:

public class HelloWorldAction extends ActionSupport {  
    private String account;  
    private String password;  
    private String submitFlag;  
      
    public String execute() throws Exception {  
        this.businessExecute();  
        return "toSecond";  
    }  
    public void businessExecute(){  
        System.out.println("用戶輸入的參數為==="+"account="+account+",password="+password+",submitFlag="+submitFlag);  
    }  
//屬性對應的getter/setter方法,省略了  
}  

  第二個Action,示例代碼如下:

public class SecondAction extends ActionSupport {     
    public String execute() throws Exception {  
        System.out.println("現在SecondAction進行處理");  
        return "toWelcome";  
    }  
}  

  然后到struts.xml中,配置這兩個Action,要注意第一個Action的配置,在配置“toSecond”這個result的時候,用的就是chain這個ResultType,示例如下:

<package name="helloworld"  extends="struts-default">  
        <action name="helloworldAction" class="cn.javass.action.action.HelloWorldAction">  
            <result name="toSecond" type="chain">  
                <param name="actionName">secondAction</param>  
            </result> 
            <!--下面這樣配置也可以
            <result name="toSecond" type="chain">secondAction</result>
             --> 
        </action>  
        <action name="secondAction" class="cn.javass.action.action.SecondAction">  
            <result name="toWelcome">/s2impl/welcome.jsp</result>  
        </action>  
    </package>  

  2)備注

  • chain不能在result配置的時候傳遞參數,也就是說,不能類似於如下的配置:
<result name="toSecond" type="chain">  
   <param name="actionName">secondAction?account=5</param>  
</result>  

  這種配置方式是不行的,因為這里要求配置的是要鏈接的Action的name,不能傳遞參數,那么,要傳遞參數怎么辦呢?那就需要在Action里面使用ActionContext或者ServletActionContext了。

  • 使用chian的方式,后面的Action會和前面的Action共用同一個ActionContext
  • 名稱為“chain”的ResultType在配置的時候,除了前面示例中的actionName外,還有一個參數,名稱為“namespace”,表示被鏈接的Action所在包的命名空間,如果不設置,默認的即是當前的命名空間。配置示例如下:
<result name="toSecond" type="chain">  
   <param name="actionName">secondAction</param>  
   <param name="namespace">其他Package的namespace</param>  
</result>  

  參考資料:http://www.iteye.com/topic/1124526


免責聲明!

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



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