首先,需要將繼承了SimpleFormController之類的sessionForm設為true。這樣,在顯示一個新表單時,Spring會將command存放在session中,而在提交表單時,Spring會從session中取出此command,隨后立即從session中刪除存放command的attribute。如果發現在session中沒有command,Spring將其斷定為重復提交,轉而執行handleInvalidSubmit(request, response),可覆蓋此方法負責防止重復提交的任務。
可以這么說,當setSessionForm(true)之后,如果沒有先后經歷顯示表單、提交表單的過程,就會被認為是重復提交表單。
而有一些情況下卻必須重復提交表單,如,修改數據庫的數據后,試圖寫入數據庫時因某些異常失敗,如果此時異常被當前頁面捕獲并依舊返回當前頁面,由于command已經被Spring在后臺從session中移走,因此,就被認為是無效重復提交,從而導致第二次經修改后的記錄無法正確提交到數據庫中。handleInvalidSubmit()必須考慮到這種情況。