执行action之后跳转,然后刷新则又执行了一次action的诡异问题。

买房动力十足 2012-07-19 08:23:37
删除的action如下:

public String deleteAthleteSignup1() throws Exception {
try {
// 删除athlete里面的countNumber
athleteSignup = this.athleteSignupService.findById(id);
// athlete = athleteService.findById(aid);
athlete = athleteSignup.getAthlete();
athlete.setCountNumber(athlete.getCountNumber() - 1);
// 删除team里面的countNumber
team = athleteSignup.getEvent().getTeam();
team.setCountNumber(team.getCountNumber() - 1);
this.athleteSignupService.updateAthleteSignup(athleteSignup);

this.athleteSignupService.deleteAthleteSignup(id);
listAthleteSignup = this.athleteSignupService.findByAthleteId(aid);

} catch (Exception e) {
e.printStackTrace();
return INPUT;
}
return SUCCESS;
}


配置文件如下:

<action name="athleteSignupDeleteBy" class="athleteSignupAction"
method="deleteAthleteSignup1">
<result name="success">/web/athleteSignup/findByAthleteId.jsp
</result>
<result name="input">/web/athleteSignup/deleteError.jsp</result>
</action>


删除之后,返回,数据是删除了。返回的也正常,因为action里面有个listAthleteSignup 页面自然就可以读取了。
但是,为什么删除action执行之后,跳转了,到这里都一切正常!但是,我再刷新一次的时候,他又执行了一次刚才的删除action,所以就导致页面报错了。请问是为啥呢?

但是另外一种写法:

<action name="saveEventBatch" class="com.yaxing.action.EventAction"
method="saveEventBatch">
<result name="success" type="redirectAction">

<param name="actionName">event/findByTeam.action</param>
<param name="id">${session.userId}</param>
<param name="fullName">${fullName}</param>



</result>
<result name="input">/web/event/error.jsp</result>
</action>

这样执行之后,再刷新是没的问题的。很纠结呢。谢谢。
...全文
175 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
枫醉秋 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

恩,我改成redirectAction 就可以了。引用 1 楼 的回复:
刷新相当于重新提交数据,当然会重新执行一次删除。

如果要避免重新提交数据,一般是三种做法:
1、删除动作是弹出页面执行的(没东西让用户刷新了);
2、删除成功后做页面跳转(必须是浏览器端页面跳转,不能是服务器端的forward);
3、用Ajax提交删除动作(刷新并不管Ajax提交的东西)。
[/Quote]
redirectAction URl重定向,所以它不会提交数据.
枫醉秋 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

刷新相当于重新提交数据,当然会重新执行一次删除。

如果要避免重新提交数据,一般是三种做法:
1、删除动作是弹出页面执行的(没东西让用户刷新了);
2、删除成功后做页面跳转(必须是浏览器端页面跳转,不能是服务器端的forward);
3、用Ajax提交删除动作(刷新并不管Ajax提交的东西)。
[/Quote]
+1
买房动力十足 2012-07-20
  • 打赏
  • 举报
回复
恩,我改成redirectAction 就可以了。[Quote=引用 1 楼 的回复:]
刷新相当于重新提交数据,当然会重新执行一次删除。

如果要避免重新提交数据,一般是三种做法:
1、删除动作是弹出页面执行的(没东西让用户刷新了);
2、删除成功后做页面跳转(必须是浏览器端页面跳转,不能是服务器端的forward);
3、用Ajax提交删除动作(刷新并不管Ajax提交的东西)。
[/Quote]
zwpalxf 2012-07-20
  • 打赏
  • 举报
回复
加redirect后url重定向了,就是说地址栏地址变了。
不加redirect,跳转后地址不变的,所以刷新会再次提交。
a11111b3 2012-07-19
  • 打赏
  • 举报
回复
token防止用户重复提交表单
1.在<from>下添加<s:token></s:token>
2.在struts2中添加
<interceptor-ref name="token"></interceptor-ref>--添加拦截器
<result name="invalid.token">/admin/token.jsp</result>--添加拦截到时跳转的页面
MiceRice 2012-07-19
  • 打赏
  • 举报
回复
刷新相当于重新提交数据,当然会重新执行一次删除。

如果要避免重新提交数据,一般是三种做法:
1、删除动作是弹出页面执行的(没东西让用户刷新了);
2、删除成功后做页面跳转(必须是浏览器端页面跳转,不能是服务器端的forward);
3、用Ajax提交删除动作(刷新并不管Ajax提交的东西)。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧