概述
今天用ssh框架写一个删除数据库数据的代码,Action定义如下:
@Action(value="/admin/deleteExam", results={@Result(name=SUCCESS, type="redirectAction", location="examChooseCourse")})
public String DeleteExam(){
course=courseDAO.findById(course.getPid());
exam=(Test)course.getTests().toArray()[0];
sessionFactory.getCurrentSession().clear();
testDAO.delete(exam);
return SUCCESS;
}
写好之后用Chrome浏览器测试的时候一切正常,但是用火狐浏览器却出现了一个数据越界的异常。
调试了一下发现,是exam获取的时候值是空的,但是这种情况是不应该存在的,因为之前有其他的语句控制,删除时exam一定是存在的。后来再用火狐调试发现这个Action居然有两个线程在跑!而在Chrome下是正常的,只有一个线程。
解决方案是增加了一个try-catch语句。
try{
exam=(Test)course.getTests().toArray()[0];
sessionFactory.getCurrentSession().clear();
testDAO.delete(exam);
}catch(Exception e){logger.info(e.getMessage());}
这样就不怕跑两次。但是感觉很不放心,以为是程序本身的问题。后来在论坛看到了论坛上也有类似问题,其中tang195的回答非常明确
找到问题了。是有一个火狐附加组件,Thunder Extension ,一看就是迅雷的破玩意。
我把附加组件全部禁用,就没问题了。然后一个一个开启,直到开启 Thunder Extension ,问题重现
然后把这个禁用,问题就没有了。看来问题就出在这个附加组件上。
试了一下以后发现的确实如此,迅雷插件真是个坑。看来为了防止类似情况在以后编码时不健壮的环节还是要着重处理一下的~
最后
以上就是鲤鱼砖头为你收集整理的迅雷插件使得火狐浏览器带参数连接执行了两遍Action的全部内容,希望文章能够帮你解决迅雷插件使得火狐浏览器带参数连接执行了两遍Action所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复