2012-06-18 35 views
3

當我向瀏覽器提交表單時,表單被提交兩次。訪問日誌顯示有兩個請求同時出現。兩個不同的線程執行它。Struts動作調用兩次 -

問題是,第一個請求包含用戶輸入的屬性值,而第二個請求調用僅包含請求對象中的空值。

並不是所有的時候都會發生這個問題。它只是有時發生,根本不可能重現。在IE8和IE9中,我都遇到了這些問題。

有誰知道爲什麼會發生?

+0

您正在使用AJAX或提交由JavaScript形式? –

+0

你可以發佈你的html

Subin

+0

如果它的用戶導致雙重請求發生檢查他們是否不雙擊。一些用戶只是總是雙擊 – Peter

回答

0

你使用struts1或struts2嗎?無論如何,他們都有避免重複提交的機制:令牌。 對於struts1,您需要在第一個操作(表單頁面的操作)中調用saveToken(),struts的'html:form'標記會自動將此標記添加到您的頁面;在您的提交動作(處理表單的行爲)中,調用isTokenValid(請求,true),並且這將驗證您的會話的頁面&中的令牌。

對於struts2,爲您的提交操作添加攔截器ref標記,並在您的表單頁面中添加's:token'標記。

上述解決方案限制服務器端重複提交,第二個請求會導致異常並作爲無效請求處理。但是如果你想在UI方面限制這個,你需要一些javascript,比如:當你點擊提交按鈕時,禁用它以避免重複提交。

+0

謝謝沉!但我想限制在UI方面。 – Ravee

4

也許問題是,您正在使用提交按鈕和document.forms[0].submit內的JavaScript onclick事件處理程序。

這樣的動作被調用兩次:

首次由

document.forms[0].submit 

第二次通過

submit button action