向数据库提交记录成功后。刷新页面又会出现相同的记录,请教高手!
解决方案 »
- ireport报错。500 Servlet Exception [show] java.lang.ClassNotFoundException: net.sf
- spring整合cxf出错,大侠们帮看一下(急)
- 请教大家一个算法的实现,万分感谢!
- JAVA中的并发问题!
- EJB3的一个问题
- 为什么我机器上不能直接用IE浏览XML而别人的机器却可以?
- java.lang.NoClassDefFoundError
- 大家都来谈谈自己的看法
- 安装了J2ee后,为什么cloudscape启动不起来?
- 请教大虾 EJB 编译问题
- Spring org.springframework.jndi.JndiObjectFactoryBean调用Tomcat数据源出错
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 Spring org.springframework.jndi.JndiObjectFactoryBe
一般通过Html表单往数据库里插入数据,都会经过两步:
第一步是通过get方法调出form表单页面;
第二步是通过post方法将数据送到数据库;控制器示例代码:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
if("GET".equalsIgnoreCase(request.getMethod()){
saveToken(request);//生成一张令牌
return mapping.findForward("form");//返回到带form表单jsp页面
}
if(!this.isTokenValid(request, true)){//检查令牌
request.setAttribute("message", "非法提交!");
return mapping.findForward("message");//返回到消息页面
}
orm.save(obj);//保存
return mapping.findForward("success");//返回到成功页面
}要注意的是,jsp页面上的form表单要用Struts的<html:form>标签
提交页面时,在session中put一个值(任意值,我自己一般put 当前session的ID)。
action中再进行判断,就可以了,代码就不写了。
也就是在struts2中result里面加 type="redirect"
<s:token/> 解决比较好!!!!!!!
原因是:因为添加一条记录后 使用转发,地址栏地址不变,而且使用struts填充数据
转发后数据任然存在,所有当你刷新后等于又重新提交了一次。
1、跳转到操作页面之前(例如新增记录页面),在服务器端生成一个键值对,并相应的保存到session中,该键值对中的值通常以时间参照来生成,这样保证每次生成的值不同,生成键值对并保存到session后,并通过request传到jsp等前台页面作为隐藏域保存到页面;
2、等前台插入操作提交后,该键值对也作为参数和值传到后台服务器,所以在插入逻辑操作前判断,该键对应的值(从前台传过来的)是否与session中的匹配,如果匹配说明是正常插入,不是刷新操作,因为每次都要产生新的值。如果不匹配,说明是刷新操作,因为刷新是完全重复上次的操作(包括所有的参数和值)。
具体代码有很多,你可以查一下,要是还没有看明白可以联系我,呵呵
1、如果你添加完表单数据后,要跳转到新页面,但是不需要传递参数,那你在Action中的跳转方式用response.sendRedirect(""); 因为该方式跳转将不能传递参数
2、如果要跳转到新页面,并且要传递参数,则要用同步器令牌(token).