一个ssh的项目,表单内容通过JavaScript认证后提交给action,可是在action处理的时候发生了问题,在js认证的时候我让它弹出了一个对话框,证明这段代码只运行了一次,也就是只提交了一次。可是在action中却收到了两次的请求。单步调试的时候发现,在action刚开始处理请求的时候就又来了另一个请求,然后两个请求被同时处理,最后导致数据库中出现了冗余记录。怎么回事呢?
日志如下
FYproject] DEBUG [http-8080-1] BarServerDAO.findAll(169) | finding all BarServer instances
opt is ------------add2test//action中的请求处理开始[FYproject] DEBUG [http-8080-1] VersionDAO.findByVersionname(280) | find  Version 
opt is ------------add2test//action中的请求处理开始[FYproject] DEBUG [http-8080-1] VersionDAO.findByVersionname(294) | find Version successful
version:t-1.10
[FYproject] DEBUG [http-8080-1] BarServerDAO.findByProperty(120) | finding BarServer instance with property: cupId, value: 3972383Nvidia42302e3120070516000000000000000SystemSerialNumberPhoenixAwardBIOSv600PGPhoenixTechnologiesLTD
[FYproject] DEBUG [http-8080-2] VersionDAO.findByVersionname(280) | find  Version 
[FYproject] DEBUG [http-8080-2] VersionDAO.findByVersionname(294) | find Version successful
山东
version:t-1.10
bar中有数据1个//调用了一个保存数组数据到数据库的方法
循环开始i的值为0
[FYproject] DEBUG [http-8080-2] BarServerDAO.findByProperty(120) | finding BarServer instance with property: cupId, value: 3972383Nvidia42302e3120070516000000000000000SystemSerialNumberPhoenixAwardBIOSv600PGPhoenixTechnologiesLTD
[FYproject] DEBUG [http-8080-1] BarServerDAO.findBarByid(218) | findBarByid
[FYproject] DEBUG [http-8080-1] BarServerDAO.findBarByid(227) | findBarByid successful
山东
bar中有数据1个
循环开始i的值为0
[FYproject] DEBUG [http-8080-2] BarServerDAO.findBarByid(218) | findBarByid
[FYproject] DEBUG [http-8080-1] TVersionBarDAO.isTestBarExist(207) | getting TVersionBar with id: 
[FYproject] DEBUG [http-8080-2] BarServerDAO.findBarByid(227) | findBarByid successful
[FYproject] DEBUG [http-8080-1] BarServerDAO.findBarByid(218) | findBarByid
[FYproject] DEBUG [http-8080-2] TVersionBarDAO.isTestBarExist(207) | getting TVersionBar with id: 
[FYproject] DEBUG [http-8080-1] BarServerDAO.findBarByid(227) | findBarByid successful
[FYproject] DEBUG [http-8080-1] TVersionBarDAO.save(38) | saving TVersionBar instance
[FYproject] DEBUG [http-8080-1] TVersionBarDAO.save(42) | save successful
[FYproject] DEBUG [http-8080-2] BarServerDAO.findBarByid(218) | findBarByid
[FYproject] DEBUG [http-8080-2] BarServerDAO.findBarByid(227) | findBarByid successful
[FYproject] DEBUG [http-8080-2] TVersionBarDAO.save(38) | saving TVersionBar instance
[FYproject] DEBUG [http-8080-2] TVersionBarDAO.save(42) | save successful
保存到数据库成功0//方法中的提示
添加测试网吧成功//action中的提示
保存到数据库成功0
添加测试网吧成功

解决方案 »

  1.   

    是你提交的表单的按钮提交了一次表单,而你在JS中进行表单验证后又提交了一次表单。建议把
    表单验证的函数放在form的onsubmit函数中,验证表单后返回true or false就行了,验证函数中不要再form.submit()了
      

  2.   

    结贴,image button的原因
    ---
    楼主仔细说明原因!
      

  3.   

    你是怎么用JS验证的啊?  onsubmit吗,还是按钮的onclick
    把你的页面form的那一段贴出来看看
      

  4.   

    如果如楼主所说:“在js认证的时候我让它弹出了一个对话框,证明这段代码只运行了一次,也就是只提交了一次。”
    那你绝对在js认证里有from.submit()的代码。而在<from>标签里又有一个action="",当然会提交两次哦。
    要这样,
    例:
      把表单a提交到action:user,提交前通过js中check()方法认证。
    <script>
      function check()
      {
         if()//满足条件
         {
            return true;
        } 
        else//不满足条件
        {
            return false;
        }
      }
    </script>
    <form id="form1" action="user.do" onsubmit="return check()">
    </form>
      

  5.   

    <form id="form1" action="*.*" onsubmit="return submitCheck()"> 
      

  6.   

    image button 本身就有submit的功能,然后又在js中验证提交一次,导致了重复提交。解决方法是在js的验证方法中返回false