在平時的開發過程中,經常可以遇到表單重複提交的問題,如做一個註冊頁面,如果表單重複提交,那麼一個使用者就會註冊多次。首先來看看引起表單重複提交的原因。
在頁面跳轉的時候,有兩種類型,請求轉寄和重新導向
所謂請求轉寄是在伺服器端進行跳轉,對使用者是透明的,此時瀏覽器中的地址不會發生改變
重新導向是在用戶端發生跳轉,跳轉時候瀏覽器中的地址欄會發生改變
如果我們在註冊時,使用了請求轉寄,那麼當我們重新整理頁面時,就會引起表單的重複提交。
現在我們需要實現這樣的一個需求:想資料庫中添加一條記錄,添加成功後在另外一個頁面中顯示資料庫中所有的記錄。
在Struts2中的struts.xml中,result標籤的type預設值是dispatcher,(請求轉寄),要實現以上的功能,肯定不能使用預設值,我們需要將其值設為redirectAction(重新導向到某一Action),也就是說重一個Action跳轉到另外一個Action,此時瀏覽器中的地址是第二個Action,結合到上面的需求,我們可以再第一個Action中將記錄添加到資料庫中,然後在第二個Action中將資料讀取出來。以後每次重新整理,那麼只會執行第二個Action
到struts-default.xml中找到與redirectionAction對應的一個類,ServletActionRedirectResult
從Api文檔中發現找出裡面有一個欄位叫做actionName,指定我們需要跳轉的Action
配置方法如下:
<action name="add" class="com.action.AddAction">
<result name="success" type="redirectAction">
<param name="actionName">show_show</param>
</result>
</action>
至於第二個Action的配置方法,相信學過struts2的同學都會。在此不在詳述。