Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 避免在struts2中执行两次操作_Eclipse_Jsp_Struts2 - Fatal编程技术网

Eclipse 避免在struts2中执行两次操作

Eclipse 避免在struts2中执行两次操作,eclipse,jsp,struts2,Eclipse,Jsp,Struts2,我正在为我的应用程序使用Struts 2和tiles 在应用程序中,我使用了一个动作类,称为“A”,它具有不同的动作方法,如add、*edit*、save、*savesuccess*等等。 在页面中,当我单击复选框时,我使用window.open方法打开一个弹出窗口,方法是调用action类a的action方法edit,该类执行一些数据库操作并将结果返回到弹出窗口。在执行一些修改之后,我将表单提交给一个名为save in action class a的操作方法,它将结果页面返回到同一个弹出窗口。

我正在为我的应用程序使用Struts 2和tiles

在应用程序中,我使用了一个动作类,称为“A”,它具有不同的动作方法,如add、*edit*、save、*savesuccess*等等。 在页面中,当我单击复选框时,我使用window.open方法打开一个弹出窗口,方法是调用action类a的action方法edit,该类执行一些数据库操作并将结果返回到弹出窗口。在执行一些修改之后,我将表单提交给一个名为save in action class a的操作方法,它将结果页面返回到同一个弹出窗口。问题是,当我关闭弹出窗口时,该操作将再次执行,并在控制台和异常中显示空值。我认为这可能是由于浏览器造成的,因此我尝试该事件。在弹出窗口中单击事件时返回值=false,但我仍然面临该问题。 我开始了解struts2中的令牌拦截器。但是当我在页面中使用标记时,它显示404错误。我将感谢那些提供了一些与在struts2中使用令牌拦截器和tiles相关的示例的人。。 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>    
Popwindow编辑窗口表单提交代码

<form name="editpage" action="saveCom" method="post">
   ..........

单击submit按钮后,它会在相同的POP窗口上打开一个新页面,如下所示

<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>

请帮我解决这个问题

在第二页中,您给出的操作是action=

我认为页面会因为该操作而刷新=

我相信您没有将任何值从此页传递到下一页,因为您正在使用self.close in按钮关闭该页


因此,请删除该表单标记并重试。这将解决问题:-

在第二页中,您给出的操作是action=

我认为页面会因为该操作而刷新=

我相信您没有将任何值从此页传递到下一页,因为您正在使用self.close in按钮关闭该页


因此,请删除该表单标记并重试。这将解决问题:-

请发布一些您正在使用并遇到问题的jsp代码。问题在于生成的页面和struts2之间,tiles只是构建结果的另一种方法,因此不应扮演重要角色。您正在使用ajax发送以弹出窗口显示的请求,对吗?当您关闭该对话时,会发送第二个请求吗?如果是这种情况,那就是JS错误,与struts没有什么关系。令牌拦截器是一个可能的解决方案,但如果是这样的话,修复simply JS错误似乎更明显。@Quaternion,谢谢你的建议。很抱歉,我没有使用ajax发送请求。我只使用javascript。第二个请求不是发送到弹出打开函数,而是调用示例中的表单提交函数,再次调用saveCom操作,而不是editCom操作。如果可能,您可以指出javascript错误。请发布一些您正在使用的jsp代码,并指出问题所在。问题在于结果页面和struts2之间,tiles只是构建结果的另一种方法,因此不应发挥重要作用。您正在使用ajax发送以弹出窗口显示的请求,对吗?当您关闭该对话时,会发送第二个请求吗?如果是这种情况,那就是JS错误,与struts没有什么关系。令牌拦截器是一个可能的解决方案,但如果是这样的话,修复simply JS错误似乎更明显。@Quaternion,谢谢你的建议。很抱歉,我没有使用ajax发送请求。我只使用javascript。第二个请求不是发送到弹出打开函数,而是调用示例中的表单提交函数,再次调用saveCom操作,而不是editCom操作。如果可能,您可以指出javascript错误。
<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>