我正在爲我的應用程序使用帶有磁貼的Struts 2。在struts2中避免動作執行兩次
在應用程序中我使用的是動作類說「A」用不同的動作的方法,如添加,*編輯*,保存,* savesuccess *等。
在頁面中,當我點擊一個複選框時,我使用window.open方法通過調用執行某些數據庫操作並返回的操作類A的操作方法「edit()」來打開彈出窗口結果彈出窗口。
在執行一些修改後,我將表單提交給操作類A中名爲「save()」的操作方法,並將結果頁返回到相同的彈出窗口。
問題是當我關閉彈出窗口時,操作再次執行並在控制檯和異常中顯示空值。
我認爲這可能是由於瀏覽器,所以我嘗試event.returnValue = false在彈出窗口中的點擊事件,但仍然面臨着問題。
我在struts2中瞭解了令牌攔截器。但是當我在頁面中使用標籤時,它顯示404錯誤。
我將感謝那些誰提供與在瓷磚Struts2的使用令牌攔截一些例子..
struts.xml的
<action name="*Com" method="{1}" class="com.act.A">
<result name="add" type="tiles">add</result>
<result name="edit" type="tiles">edit</result>
<result name="save" type="tiles">save</result>
<result name="savesuccess" type="tiles">savesuccess</result>
父頁彈出窗口開放代碼:
editwindow=window.open("editCom?id="+id+"&name="+name+"..and son on","edit","width=605px,height=270px,channelmode=no,left=250px,location=no,menubar=no,status=no,titlebar=no,toolbar=no,top=250px,scrollbars=yes,resizable=no");
Popwindow編輯窗口提交代碼
<form name="editpage" action="saveCom" method="post">
..........
點擊提交按鈕打開它在同一popwindow了新的一頁這樣
<html>
<script type="text/javascript">
function check1(){
window.opener.location="savesuccessCom";
}
</script>
<body onunload="check1">
<form name="editsave" method="post" action="" >
.....
<p>Changes Saved Successfully</p>
<input type="button" name="Saved" id="Save" value="Save" onclick="self.close();event.returnValue=false;"/>
</form>
</body>
</html>
請幫我解決這個問題之後。
請張貼你正在使用的一些jsp代碼,並得到問題。 – sunleo
問題出在結果頁面和struts2之間,瓷磚只是構建結果的另一種方式,所以不應該扮演重要角色。你用ajax發送一個彈出顯示的請求是否正確?當你關閉對話時,會發送第二個請求?如果是這種情況,這是一個JS錯誤,與struts無關。令牌攔截器是一個可能的解決方案,但修復一個簡單的JS錯誤似乎更明顯,如果是這樣的話。 – Quaternion
@Quaternion,謝謝你的建議。對不起,我沒有使用Ajax發送請求。我只使用JavaScript。第二個請求是不發送給彈出的開放函數,它調用表單提交函數(在這個例子中,它再次調用「saveCom」動作,而不是「editCom」動作。如果可能的話,你可以指出javascript錯誤。 –