An easier way would be to do a redirect once submitting the form to
listing the page.

-----Original Message-----
From: Shane Mingins [mailto:[EMAIL PROTECTED] 
Sent: Friday, September 19, 2003 10:26 AM
To: 'Struts Users Mailing List'
Subject: RE: Refreshing Form Submission and Duplicates

I noticed this the other day at http://husted.com/struts/catalog.html

Use the Action Token methods to prevent duplicate submits

There are methods built into the Struts action to generate one-use
tokens. A
token is placed in the session when a form is populated and also into
the
HTML form as a hidden property. When the form is returned, the token is
validated. If validation fails, then the form has already been
submitted,
and the user can be apprised. 

- saveToken(request) 
- on the return trip, 
        isTokenValid(request) 
        resetToken(request)


I am not sure if that is of any help as I have yet to use it ...
although I
have just this minute found a case in my own application to do so ;->

Shane



> -----Original Message-----
> From: John Reynolds [mailto:[EMAIL PROTECTED]
> Sent: Friday, 19 September 2003 2:16 p.m.
> To: [EMAIL PROTECTED]
> Subject: Refreshing Form Submission and Duplicates
> 
> Hi,
> 
> I have a question about a bug in my application using a Struts Form.
> This happens in multiple areas of my site, but the one example I will
> use is a Message Board feature. The problem is that when a user goes
to
> a list of messages, fills out the form to post a message and ends up
> back on the list page, the message will be submitted twice if they
> refresh the page following the form submission. this has caused
> duplicate messages throughout the message board, as it is the nature
of
> message boards to refresh the list of messages often to check for new
> ones. Keep in mind, my app strictly follows the approach of the
O'Reilly
> book.
> 
> I'll try to make this easy to follow:
> 
> 1. the user goes to a message board with a list of messages from other
> users. this page is /messagelist.do the action looks like this:
> 
>       <action
>             path="/messagelist"
>             name="messageListForm"
>             type="myapp.framework.actions.MessageListAction"
>             scope="request">
>             <forward name="Success"
path="/templates/messagelist.jsp"/>
>       </action>
> 
> (the "messageListForm" is a struts form bean with a List of message
> objects)
> 
> 2. at the bottom of the page is a form to post your own message 3. the
> user enters their Name, Subject and Message Body and submit the form
4.
> the form is processed by a Struts Action. the action tag in
> struts-config.xml looks like this:
> 
>       <action
>             path="/messageinsert"
>             name="messageDetailForm"
>             type="myapp.framework.actions.MessageInsertAction"
>             scope="request"
>             validate="false">
>             <forward name="Success" path="/messagelist.do"/>
>       </action>
> 
> - From the naming convention, you can see that the Action inserts the
> message into storage (database) and upon success the user is forwarded
> to the same /messagelist.do action
> 
> Now, when the form is submitted and this is displayed, the URL in the
> browser says:
> 
> http://myapp.com/myapp/messageinsert.do
> 
> I expect that this is correct because the HTML form itself was <form
> action="/messageinsert.do" method="POST">.
> 
> The user's submitted message will be found on the list of messages.
> HOWEVER, IF THEY REFRESH THE SCREEN, THE MESSAGE WILL BE SUBMITTED
> AGAIN. This should not happen. If i'm the customer, i've already
> submitted the form, and now i'm seeing a list of messages. refreshing
> should have no effect on the form that i just submitted.
> 
> Does anyone have a suggested fix?
> 
> Thanks all,
> 
> JR
> 
> 

---------------------------------------------------------------------
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