如题:
当填写完一个表单,点击提交,创建一条新数据的时候,当创建成功时,点击浏览器的后退按钮,又点击提交按钮,这时可能会出现表单重复提交的可能,因为表单中没有唯一项,而ID又是数据库自动生成的,故而能够再次创建一条和上面重复的数据,如何避免这种情况?
1.给表单中的选项的某些字段设置成唯一的,这样重复提交表单就不会再次创建一条新的数据了。
2.在进入创建页面的时候,就生成一个ID,隐藏在页面中,提交表单后将之前创建的ID作为这条数据的ID,这样当点击浏览器的返回时,该ID还是之前创建出来的ID,因此能够避免重复提交。
3.利用令牌机制,如struts2中的令牌,亦可。但是Grails中是否也有令牌呢?答案是肯定的,查阅Grails API可以知道,在Controller下的withForm,可以实现。
如:
withForm { // 第一次提交表单 // good request }.invalidToken {但是,在此之前得在表单页面的form添加// 重复提交表单// bad request}
<g:form useToken="true" ...>
如此,在Grails中能解决表单重复提交