[英]Struts action called twice -
當我向瀏覽器提交表單時,表單會被提交兩次。訪問日志顯示同時出現兩個請求。執行它的兩個不同的線程。
問題是,第一個請求包含用戶輸入的屬性值,而第二個請求調用僅包含請求對象中的空值。
並非所有時間都會出現這個問題。它只是偶爾發生,根本不可重復。在IE8和IE9中,我遇到了這些問題。
有人知道為什么會這樣嗎?
也許問題是你在javascript onclick
事件處理程序中使用了提交按鈕和document.forms[0].submit
。
因此,動作被調用兩次:
第一次來
document.forms[0].submit
第二次
submit button action
你使用struts1還是struts2? 無論如何,他們都有一個機制來避免重復提交: 令牌 。 對於struts1,您需要在第一個操作(表單頁面的操作)中調用saveToken() ,並且struts的'html:form'標記會自動將此標記添加到您的頁面; 在您的提交操作(處理表單的操作)中,調用isTokenValid(request,true) ,這將驗證您的頁面和會話中的令牌。
對於struts2,為您的提交操作添加攔截器引用令牌,並在表單頁面中添加's:token'標記。
上述解決方案限制在服務器端重復提交,第二個請求將導致異常並作為無效請求處理。 但是如果你想在UI方面限制它,你需要一些javascript,例如:當你點擊提交按鈕時,禁用它以避免重復提交。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.