2015-03-02 71 views
0

在普通的舊servlets我可以使用doGetdoPost方法。在doGet我轉發用戶到一些頁面,並在doPost我正在處理從我給的頁面輸入的數據。這一切都發生在一個servlet中。如何在Struts 2中使用視圖?

但Struts2的作品在前端控制器模式,而不是doGet/doPost我只有execute方法。那麼我該如何正確給用戶一些頁面,這樣他才能看到它,輸入數據,提交和應用程序,結果在execute中進行處理?

從我知道我有兩個選擇(報名表爲例):

  1. 地圖網頁到另一個網址:

    <action name="register_display"> 
        <result name="success" type="dispatcher">register.jsp</result> 
    </action> 
    
    <action name="register" 
        class="magazine.action.client.RegisterClientAction" 
        method="execute"> 
        <result name="success" type="redirectAction">/index</result> 
        <result name="error" type="redirectAction">register_display 
        </result> 
    </action> 
    
  2. 創建一個名爲display全包,並把那裏所有查看哪些POST可以執行:

    <package name="display" namespace="/display" extends="struts-default"> 
        <action name="register"> 
        <result name="success" type="dispatcher">register.jsp</result> 
        </action> 
    ... 
    </package> 
    

還有其他的選擇嗎?哪一個是首選?

+0

向我們展示來自Struts.xml文件的相應操作。 – 2015-03-02 09:29:36

+0

創建方法,不要顯式使用'execute'方法,創建2個動作(一個不帶方法,其他帶自定義方法)。 – 2015-03-02 09:56:42

+0

除非使用Struts動作的REST樣式映射,否則應該使用不同的動作名稱。 – 2015-03-02 10:28:30

回答

1

在標準Struts2風格中,Action類只有一種工作方法,這是execute方法。但是,您不必須遵循這一點。您可以在單個Action類中定義多個操作。

例如,您對users發出GET請求,這個請求通過UsersAction的默認execute方法處理。

@Override 
public String execute() { 
    // fetch the list of users 
    return SUCCESS; 
} 

假設您想添加一個新用戶在這個同樣的動作,通過張貼到user_add。所以,你定義一個add方法:

public String add() { 
    // add the user 
    return SUCCESS; 
} 

struts.xml將類似於此:

<package name="users" extends="defaultPackage"> 
    <action name="users" class="com.example.UsersAction"> 
     <result>users.jsp</result> 
    </action> 

    <action name="user_add" class="com.example.UsersAction" method="add"> 
     <result type="redirect">users</result> 
    </action> 
</package> 

在你的情況,你會令你的頁面,用戶應的運行後,看到(也許是空的)execute方法。然後,您將發出發佈請求,將其映射到Action類的另一個方法。