为了避免重新提交表单,我使用了POST-Redirect-GET模式,它运行正常。现在在我的注册页面(成功页面)上显示ActionMessage“Review Inserted successfully!”。当用户刷新页面时,我想删除此消息。
我在JSP页面上的代码:
<s:if test="hasActionMessages()">
<div class="success-mesg" id="success-mesg">
<s:iterator value="actionMessages">
<s:property value="top" />
</s:iterator>
</div>
</s:if>
在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>
在Action类中:
public String insertReviewDone(){
addActionMessage("Write review is successful");
return "success";
}
修改:
在实施Aleksandr M建议的答案后,我遇到了以下问题:
<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>
在上面的代码中刷新页面后,businessName被删除而不显示。 任何帮助将不胜感激。
答案 0 :(得分:3)
使用Message Store Interceptor
在insertReview
中存储操作消息,并在insertReviewDone
操作中检索该消息。
当您返回insertReview
结果时,在insertReviewDone
方法中添加操作消息。
还可以使用redirectAction
结果重定向到操作,而不是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>
答案 1 :(得分:1)
另一种方式,比@AleksandrM提出的(好的)技术要少,但适用于那里的每个框架,不仅仅是Struts2,而是放置这个
<script>
$(document).ready(function() {
window.history.pushState("","", location.href);
});
</script>
在<head>
部分。但是,它不适用于没有HTML5功能的旧浏览器。
注意:jQuery部分不是必需的,它仅用于确保在页面加载后运行,您可以在没有它的情况下运行HTML5 pushState()
。