避免在struts2中执行两次Action

时间:2012-11-08 12:51:19

标签: eclipse jsp struts2

我正在为我的应用程序使用带有tile的Struts 2。

在我正在使用动作类的应用程序中,使用不同的操作方法说'A',例如添加,* edit *, save , *节省成功*等等。

    在页面中,当我单击一个复选框时,我使用window.open方法通过调用动作类A的动作方法“edit()”来打开弹出窗口,动作类A执行一些数据库操作并将结果返回给弹出窗口。
执行一些修改后,我将表单提交给动作类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>

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:4)

在第二页中,您提供的操作是action =&#34;&#34;。

我认为由于该操作导致页面刷新=&#34;&#34;。

我相信您没有将此页面中的任何值传递到下一页,因为您正在使用按钮中的self.close()关闭页面。

因此请删除该表单标记并再次尝试。这将解决问题:-)