Grails has built in support for handling duplicate form submissions using the "Synchronizer Token Pattern". To get started you need to define a token on the
form tag:
<g:form useToken="true" ...>
Then in your controller code you can use the
withForm method to handle valid and invalid requests:
withForm {
// good request
}.invalidToken {
// bad request
}
If you only provide the
withForm method and not the chained
invalidToken
method then by default Grails will store the invalid token in a
flash.invalidToken
variable and redirect the request back to the original page. This can then be checked in the view:
<g:if test="${flash.invalidToken}">
Don't click the button twice!
</g:if>
The withForm tag makes use of the session and hence requires session affinity if used in a cluster.