How to change URL while getting response page in Struts 2

596 Views Asked by At

I am doing registration using Struts and Hibernate here and I am facing a problem like when I run my project I get

localhost/ProjectName/registration.jsp

when I submit the data, data successfully saved in database, after saving data in database I am looking for registration.jsp as response page but that time URL will be

localhost/ProjectName/actionName.action 

this would create a problem like if I refresh page the last added record will be added again

JSP Form:

<s:form action="register">
</s:form>

struts.xml:

<action name="register" class="-----------">
    <result name="success">registration.jsp</result>
</action>
1

There are 1 best solutions below

6
On

You should follow PRG pattern mentioned in this answer.

Create a new action registrationSuccess that will return your JSP page after redirect action result.

<action name="register" class="-----------">
 <interceptor-ref name="store"> 
    <param name="operationMode">STORE</param> 
  </interceptor-ref> 
  <interceptor-ref name="defaultStack" /> 
  <result name="success" type="redirectAction">registrationSuccess</result>
</action>

<action name="registrationSuccess">
  <interceptor-ref name="store"> 
    <param name="operationMode">RETRIEVE</param> 
  </interceptor-ref> 
  <interceptor-ref name="defaultStack" />
  <result name="success">registration.jsp</result>
</action>

You can use store Interceptor to store action messages/errors in HTTP session. The action class should implement ValidationAware.

The store interceptor works between two actions, one of them store the messages, another retrieve them.

An interceptor to store a ValidationAware action's messages / errors and field errors into HTTP Session, such that it will be retrievable at a later stage. This allows the action's message / errors and field errors to be available longer that just the particular HTTP request.

If no session exists, nothing will be stored and can be retrieved later. In other terms, the application is responsible to open the session.

In the STORE mode, the interceptor will store the ValidationAware action's message / errors and field errors into HTTP session.

In the RETRIEVE mode, the interceptor will retrieve the stored action's message / errors and field errors and put them back into the ValidationAware action.

In the AUTOMATIC mode, the interceptor will always retrieve the stored action's message / errors and field errors and put them back into the ValidationAware action, and after Action execution, if the Result is an instance of ServletRedirectResult, the action's message / errors and field errors into automatically be stored in the HTTP session..