form表单提交controller运行两次如何解决?

form表单提交数据,由于有附件enctype ="multipart/form-data",controller运行两次,去掉附件则正常运行
请问如何解决?

这个问题,我之前也遇到过,看有没有用的表单validator框架,如果有验证框架,把提交按钮改成button,在表单验证函数那进行表单验证后提交,
如果没有理论上是不会重复提交的,可能是有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network,请求次数。等等。。。

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

之前我遇到过类似的问题,但是不是在提交附件的时候,是普通ajax提交请求的时候,是因为母版页和自视图中引用了两次ajax的js文件,删除一个就好了。

验证下页面加载会不会提交

先看看network 有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,

因为附件会走一边 ,表单走一边 所以 controller 断点运行两边

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

1、js中有路径重复,并在返回页面时执行了请求方法。

2、提交的事件编码绑定的input的type是submit;

3、使用nginx作为反向代理服务器(或者负载均衡)时,后端的Tomcat或者JBoss执行逻辑时间过长,导致nginx重发请求;

4、前端绑定的元素是a或者img这两个html标签时src="";

5、使用了struts2的form标签,而且其action="",而form试用了javascript提交,如:

  document.getElementByIdx_x_x("formId").action="XXXX";

  document.getElementByIdx_x_x("formId").sumit();

   参考文章:http://blog.csdn.net/phoenix2121/article/details/5683098

6、执行访问后台请求的javascript代码放在js文件中,并且也页头和页尾可能被引入了多次;

7、请求struts2的action方法是以get开头的,比如xxx!getXxx.do,参考文章:http://blog.csdn.net/gl74gs48/article/details/7838371

8、一个button可能被动态绑定了多个请求的javascript;

9、浏览器是firefox,而且被安装了一些插件,如:yslow;

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

如果代码采用了JS上传,则需要将form中的submit改为button,一般是由于这个原因造成的,可以采取伪办法,采用表单令牌,防止二次重复提交

现在项目里面只要是涉及的附件上传用到request都会发生这样的问题
public ModelAndView uploadPay(HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
// 文件名称
String fileName = shareService.getUpdateFileSavePath(request);
// 服务器地址
String logoRealPathDir = request.getSession().getServletContext()
.getRealPath("/");
// 文件的全部地址
String filePath = logoRealPathDir + fileName;

    if (fileName.endsWith("xls") || fileName.endsWith("xlsx")) {
        try {
            paymentDetailService.uploadPay(filePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    mav.setViewName("backend/admin/advicePaymentDetail.jsp");
    return mav;

可以试试先上传附件,附件ajax上传成功之后在提交表单。

查看SPRING配置文件,不是不扫描两次这个CONTROLLER

先把form提交的去掉,看下是否会提交到controller

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

比较麻烦,每次在提交表单时都必须传入上次的token。而且当一个页面使用ajax时,多个表单提交就会有问题。
注解Token代码:
package com.thinkgem.jeesite.common.repeat_form_validator;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

/**

  • 页面form token
  • @author Administrator
  • */

    @Target(ElementType.METHOD)

    @Retention(RetentionPolicy.RUNTIME)

    public @interface FormToken {

    boolean save() default false;

    boolean remove() default false;

    }

这个问题,我之前也遇到过,看有没有用的表单validator框架,如果有验证框架,把提交按钮改成button,在表单验证函数那进行表单验证后提交,
如果没有理论上是不会重复提交的,可能是有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network,请求次数。等等。。。

form提交之后,将submit按钮设置成失效或影藏

看一是前端页面脚本是不是写得有问题

submit按钮改为普通button,使用ajax提交

先看看network 有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,
这个先排查一下脚本、引用的脚本

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

不用form直接提交,改为button,然后ajax发数据呢?

这个问题,我之前也遇到过,看有没有用的表单validator框架,如果有验证框架,把提交按钮改成button,在表单验证函数那进行表单验证后提交

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

用form表单的令牌验证重复

尝试用 jquery.form.js 提交 附件 上传呢

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

有脚本控制提交,form本身又提交了,这个先排查一下脚本、引用的脚本,如果还没找到可以用浏览器调试一下,打个debugger看看,最后看看network

理论上是不会的,先排查一下脚本,在提交的时候是不是又转到Javascript代码,又执行了一次!

enctype就是encodetype翻译成中文就是编码类型的意思!multipart/form-data是指表单数据有多部分构成:既有文本数据,又有文件等二进制数据的意思。
另外需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据。
对于文件上传工作,其实是在前端完成的,即,在php,java等语言处理之前,文件其实就已经被上传到服务器了,服务器脚本语言的作用不过是将这些临时文件持久化而已!

自动刷新吗?你有没有定义form的方法呀?

重复运行与enctype ="multipart/form-data"有关系马?

附件会走一边 ,表单走一边 所以 controller 断点运行两边

提交程序和FORM不放在一个页面处理

应该是有脚本控制提交,在ajax提交请求的时候,删除一个js文件即可