To avoid the form resubmission I used POST-Redirect-GET pattern and it is working fine. Now on my registration page(success page) it is showing the ActionMessage "Review Inserted successfully!". When user refreshes the page I want to remove this message.
My code on JSP page:
<s:if test="hasActionMessages()">
<div class="success-mesg" id="success-mesg">
<s:iterator value="actionMessages">
<s:property value="top" />
</s:iterator>
</div>
</s:if>
On struts.xml:
<action name="insertReview" class = "com.tenkinfo.streamlinedmapnsav.ui.action.WriteReviewAction" method="insertReview" >
<result name="insertReviewDone" type="redirect" >insertReviewDone</result>
<result name="input" type="tiles">display.writeReview.page</result>
</action>
<action name="insertReviewDone" class = "com.tenkinfo.streamlinedmapnsav.ui.action.WriteReviewAction" method="insertReviewDone" >
<result name="success" type="tiles" >display.writeReview.page</result>
</action>
In Action class:
public String insertReviewDone(){
addActionMessage("Write review is successful");
return "success";
}
Edit :
After implementing the answer suggested by Aleksandr M, I am having below problem:
<s:form name="insertReview" action="insertReview" id="insertReview"
theme="simple" enctype="multipart/form-data">
<div class="content-area">
<h1>
Review
<s:property value="businessName" />
</h1>
<s:if test="hasActionMessages()">
<div class="success-mesg" id="success-mesg">
<s:iterator value="actionMessages">
<s:property value="top" />
</s:iterator>
</div>
</s:if>
After refreshing the page in above code businessName is removed and not displaying. Any help will be appreciated.
Use Message Store Interceptor
to store action message in your insertReview
and retrieve it in your insertReviewDone
action.
Add action message in insertReview
method when you are returning insertReviewDone
result.
Also use redirectAction
result to redirect to action instead of redirect
.
<action name="insertReview" class = "com.tenkinfo.streamlinedmapnsav.ui.action.WriteReviewAction" method="insertReview">
<interceptor-ref name="store">
<param name="operationMode">STORE</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result name="insertReviewDone" type="redirectAction">insertReviewDone</result>
<result name="input" type="tiles">display.writeReview.page</result>
</action>
<action name="insertReviewDone" class = "com.tenkinfo.streamlinedmapnsav.ui.action.WriteReviewAction" method="insertReviewDone" >
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result name="success" type="tiles">display.writeReview.page</result>
</action>