This ought to work:

        Step 1: Synchronize your servlet.doService() on the HttpSession so
that two user requests will never run in parallel.
        Step 2: Add a hidden, monotonically increasing (like a static
incrementer) hidden value to the form in question.
        Step 3: Add a LinkedHashMap to your Visit object called
"LastFiveSubmits". Set its removeOldest() to remove if the map size > 5.
        Step 4: When you get a "submit" request, check and see if you're
already handled a submit for this form in, say, the last 5 interactions. If
not, handle the submit, and stuff it's submission ID into the linkedhashmap
(from step 3).

        That should do the trick.

        Of course, using javascript to disable the submit button is much
easier, but if you can't, you can't.

        --- Pat


> -----Original Message-----
> From: Ralph Johnston [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, August 30, 2005 5:06 PM
> To: Tapestry users
> Subject: Preventing multiple form submission within Tapestry
> 
> Hi, we're working on a project in which we need to submit a form which
> then creates
> a record in a database on successful submission.  The problem we have is
> that if
> someone clicks on the submit button more than once, it creates duplicate
> records of
> the record that the person is trying to submit.
> 
> We've searched the mailing list archives (as best we can) with no luck.
> We know
> there is a way to prevent this using Javascript.  However, not all the
> people using our
> form are guaranteed to have Javascript enabled.  Therefore, we need a way
> of
> disabling the button or creating a semaphore of sorts to prevent multiple
> submissions
> that either create the new record or alter it in a drastic way.  Some
> ideas we have
> are...
> 
> 1) Send back something that will disable the button's submit ability to
> submit the form
> again. For example, somehow killing TCP connection to that form until the
> submit is
> done.
> 
> 2) Hanging when the submission occurs, like display a white page until
> it's done so
> that the user doesn't click something else and terminate the submission.
> 
> 3) Letting the user do whatever he/she wants with the web page
> particularly by
> disabling all the other submit buttons but when the original submit
> listener finishes
> what it's doing, it redirects like we want it to do to the appropriate
> page no matter
> what page the user is on.
> 
> Any other ideas or even solutions would be appreciated. Thank you.
> 
> Ralph Johnston / Phil Whaley
> The Pathfinder Group, Ltd.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to