[英]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.