关于form表单,刷新页面会自动提交的问题.

我有一个form表单,提交到一个java的controller,然后返回一个jsp页面。
表单是这样提交的

 <a href="javascript:void (0)" onclick="document.getElementById('subform').submit();return true">

当我提交后,返回页面过后,我刷新(F5)页面,为什么表单又会重新提交,怎么防止它重新提交?

https://www.cnblogs.com/xdp-gacl/p/3859416.html

改成return false也是一样的效果

处理自动提交的方式很多,但是如果就是一个的话,你可以自己做一个,比如判断关键字段空也可以的

这个正常,不过,可以通过页面跳转来解决。

取消默认行为就行了。e.preventDefault

提交成功后 用return返回false

1、首先你要确认地址栏中的网址是否与当前页面路径一致,若不一致,刷新只是基于地址栏网址的刷新;
2、你可能是通过POST提交的,请确认提交后,跳转的页面是不是通过GET也可以打开,若不能,刷新也会有问题。

可以提交表单后重新转向地址就可以!

post请求处理完成后重定向到get就可以了

可以使用token机制

搞一个隐藏字段啊,在SUBMIT这里做个CLICK事件,如果手动提交的改变这个隐藏字段的值,服务器可以判断这个值来判断是不是刷新还是提交

不要用转发,用重定向

可以设置return的值为false,这样就不用担心点击提交了

1、form方法是不是get提交,改成post(这种会再次访问一次服务器)
2、阻止F5的刷新(这个F5直接不起作用)

原理:提交表单--发出请求(此时浏览器的地址是:form里的action地址,包含表单信息)--处理器默认转发到相应页面--转发地址栏不变,所以刷新会重复提交

解决:处理器重定向到页面,return "redirect:/index.jsp"; 地址栏变为:/index.jsp,此时怎么刷新都没问题

使用异步提交吧,提交完成后再跳转

String token = TokenProccessor.getInstance().makeToken();//创建令牌
System.out.println("在FormServlet中生成的token:"+token);
request.getSession().setAttribute("token", token); //在服务器使用session保存token(令牌)
request.getRequestDispatcher("/form.jsp").forward(request, response);//跳转到form.jsp页面

页面取出令牌 判断

if ($("#ID")){
$("#ID").text("hi");
}

为什么不用《input type =:"submit"这个呢