簡體   English   中英

在struts2中通過GET或POST控制操作方法

[英]Control action method by GET or POST in struts2

我是Struts2的新手,來自PHP背景,我經常有相同的文件處理GET和POST請求,如果請求是POST請求,則處理表單。

我目前在struts.xml中有以下內容:

<action name="ProcessData" class="ProcessDataAction">
    <result name="*">processdata.jsp</result>
</action>
<action name="ProcessDataUpload" class="ProcessDataAction" method="upload">
    <result name="*">processsdata.jsp</result>
</action>

哪個工作正常,但令我困擾的是,處理POST的URL是不同的,因為現在如果用戶重新加載頁面,他們會收到錯誤而不是簡單地看到GET頁面的內容。

所以我的問題是,有沒有辦法告訴struts2調用一個方法,如果它是一個GET請求,另一個方法,如果它是一個POST請求?

Struts2沒有提供您開箱即用的內容。 如果要強制某個特定的操作方法只能通過某些HTTP方法調用,那么您需要創建一個自定義攔截器,可能還需要一些自定義注釋。

如果您只是想要相同的操作來處理顯示表單並進行處理,那么您可以執行以下操作:

public class MyAction {
  public String execute() {
    return INPUT;
  }

  public void validate() {
    // perform any form validation needed
  }

  public String submit() {
    // process the form and then redirect
  }
}

在您的表單中,您將提交ProcessData!submit。 的! 將操作與操作方法名稱分開。 它提供了您已經擁有的內容,但您不需要顯式映射struts.xml中的每個方法。

但令我困擾的是,處理POST的URL是不同的,因為現在如果用戶重新加載頁面,他們會收到錯誤而不是簡單地看到GET頁面的內容。

成功發布后重定向用戶將完全取消此點。 查看“Post Post After Post”或“Post / Redirect / Get”模式)。

不是默認情況下,不是。 IMO最干凈的解決方案是通過查看請求類型的攔截器來調整方法名稱。 例如,我有一個簡單的查找executeGet和executePost方法的方法。

這是不是一個好主意......不同的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM