當我向瀏覽器提交表單時,表單被提交兩次。訪問日誌顯示有兩個請求同時出現。兩個不同的線程執行它。Struts動作調用兩次 -
問題是,第一個請求包含用戶輸入的屬性值,而第二個請求調用僅包含請求對象中的空值。
並不是所有的時候都會發生這個問題。它只是有時發生,根本不可能重現。在IE8和IE9中,我都遇到了這些問題。
有誰知道爲什麼會發生?
當我向瀏覽器提交表單時,表單被提交兩次。訪問日誌顯示有兩個請求同時出現。兩個不同的線程執行它。Struts動作調用兩次 -
問題是,第一個請求包含用戶輸入的屬性值,而第二個請求調用僅包含請求對象中的空值。
並不是所有的時候都會發生這個問題。它只是有時發生,根本不可能重現。在IE8和IE9中,我都遇到了這些問題。
有誰知道爲什麼會發生?
你使用struts1或struts2嗎?無論如何,他們都有避免重複提交的機制:令牌。 對於struts1,您需要在第一個操作(表單頁面的操作)中調用saveToken(),struts的'html:form'標記會自動將此標記添加到您的頁面;在您的提交動作(處理表單的行爲)中,調用isTokenValid(請求,true),並且這將驗證您的會話的頁面&中的令牌。
對於struts2,爲您的提交操作添加攔截器ref標記,並在您的表單頁面中添加's:token'標記。
上述解決方案限制服務器端重複提交,第二個請求會導致異常並作爲無效請求處理。但是如果你想在UI方面限制這個,你需要一些javascript,比如:當你點擊提交按鈕時,禁用它以避免重複提交。
謝謝沉!但我想限制在UI方面。 – Ravee
也許問題是,您正在使用提交按鈕和document.forms[0].submit
內的JavaScript onclick
事件處理程序。
這樣的動作被調用兩次:
首次由
document.forms[0].submit
第二次通過
submit button action
您正在使用AJAX或提交由JavaScript形式? –
你可以發佈你的html
如果它的用戶導致雙重請求發生檢查他們是否不雙擊。一些用戶只是總是雙擊 – Peter