I don't believe there is any canned "best practice" solution for this issue.
My apps do the same thing; on a successful post I redirect to a get,
on a validation error they simply forward back to the jsp so as to
preserve the input data.

It is possible to manually include all your form fields data as
parameters on the redirect but that is very tedious and error prone
and on large forms you may hit url size limitations.

For me I've just accepted that on a validation fail the back button
will be un-friendly.

If you want to take the route of passing all your fields back on the
redirect when validation fails you could probably write a custom
result type that would automatically append all the request parameters
to the redirect url.  I don't think this would be too hard to write.

Your only other option would be to stuff the data into the session and
then pull in out on the next get.  I would not recommend this
approach, it appears to me to be very error prone as there is no
guarantee that the next request will be the one that wants the data or
that the request will ever happen. You could end up filling up the
session with data that never get retrieved. Just seems like a poor
design.


On Wed, May 26, 2010 at 8:45 AM, szerintedmi <szerinte...@gmail.com> wrote:
> Hi Everybody,
>
> I would like to ask some advice implementing PRG pattern with struts2 (using
> 2.0.14).
>
> I can easily handle a normal scenario :
> 1.GET showItem.action?itemId=1
>    result: showItem.jsp
> 2. POST saveItem.action
>   result: redirect-action: success?itemId=1
> 3. GET success?itemId =1
>  result: success.jsp
>
> Browser back works perfectly with this workflow.
>
> However if there is a form error at step 2.:
> 1. GET showItem.action?itemId=1
>  result: showItem.jsp
> 2.1 POST saveItem.action
>   result: showItem.jsp (with field/action errors)
> 2.2 POST saveItem.action (user fixed errors on form)
>  result: redirect-action: success?itemId=1
> 3. GET success?itemId=1
>  result: success.jsp
>
> In this scenario if the user press back after the 3rd step he gets a page
> with saveItem.action url (without params) and with a re-submit browser
> alert.
>
> If a form validation error happens I could use a redirect-action result to
> showItem.action at step 2.1.
> But that way I'm loosing all the posted form data and the data field/action
> errors.
>
> Alternativelly I could use the same action to show and save, that way url
> would be showItem after 2.1 but still without url params. I could hack url
> query string to the reponse but still have re-submit alerts from browser
> after user press back button because that was a result of a post.
>
> What is the best practice to handle form errors with struts if I want to
> implement Post-Redirect-Get pattern?
>
> Thanks,
>
> Peter
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org

Reply via email to