首先来看一下我要做的东西,一个简单的运用springMVC做一个管理员的增删改查的表。在jsp界面中用onclick方法调用go

mysql 如何保证两次查询的uuid不一致 sql查询出现两次以上_方法调用


这里是go方法一个简单的转向

mysql 如何保证两次查询的uuid不一致 sql查询出现两次以上_button的默认属性_02


然后他会调用controller里的add,这里add加在了requestmapping的注解里,

mysql 如何保证两次查询的uuid不一致 sql查询出现两次以上_sql语句两次提交_03


因为在xml文件中加了.jsp后缀会自动return user.jsp。

在user.jsp里有个判断方法,如果传过来的参数id不为空,则执行insert,这里判断是为了和update方法区分,因为修改是会指定某一行,有id参数传参。

mysql 如何保证两次查询的uuid不一致 sql查询出现两次以上_button的默认属性_04


判断后,form表单提交转向controller,执行insert

mysql 如何保证两次查询的uuid不一致 sql查询出现两次以上_ajax_05

这里用的是ajax,因为错误不是出在这里就不过多概述。最后执行保存。

mysql 如何保证两次查询的uuid不一致 sql查询出现两次以上_sql语句两次提交_06

mysql 如何保证两次查询的uuid不一致 sql查询出现两次以上_方法调用_07


在这里错误就出现了,虽然数据新增成功了,但是执行了两遍,

mysql 如何保证两次查询的uuid不一致 sql查询出现两次以上_button的默认属性_08


因为并没有报错,为了找出错误,我在controller里的每个方法都加了system舒服一下,结果

mysql 如何保证两次查询的uuid不一致 sql查询出现两次以上_增删改查_09

试了很多地方也没发现原因,最后只能在save方法里做尝试。终于在这里找到了病因,改下这样之后,问题就迎刃而解了。

mysql 如何保证两次查询的uuid不一致 sql查询出现两次以上_增删改查_10

因为我是初学者,所以很多细节属性了解的不多,在这里专门查了一下,如果不加type=button的话,button在这里默认为submit属性,会再提交一次,所以不论是insert还是update都会执行两次,W3C给出的标准是:Internet Explorer 的默认类型是 “button”,而其他浏览器中(包括 W3C 规范)的默认值是 “submit”。所以,为了避免再犯错误,最哈养成习惯,在使用button的时候随手为按钮规定 type 属性。button的type属性有三种类型:submit,button,reset。button-普通按钮,submit-提交按钮。

  submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了,submit和button,二者都以按钮的形式展现,看起来都是按钮,所不同的是type属性和处发响应的事件上。

  写的东西比较简单,但是错误是真的刻骨铭心。找了一天半,希望能帮到大家。