2013-09-20 1 views
3

Чтобы избежать повторной отправки формы, я использовал шаблон POST-Redirect-GET и работает нормально. Теперь на моей странице регистрации (странице успеха) отображается ActionMessage «Обзор вставлен успешно!». Когда пользователь обновляет страницу, я хочу удалить это сообщение.В шаблоне PRG Как удалить ActionMessage при обновлении страницы успеха

Мой код на 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> 

В классе действий:

public String insertReviewDone(){ 
    addActionMessage("Write review is successful"); 
    return "success"; 
} 

Edit:

После реализации ответа, предложенный Александр М, У меня ниже проблем:

<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 удаляются и не отображается. Любая помощь будет оценена по достоинству.

+1

Почему downvote? +1, чтобы компенсировать это. –

+0

Храните его в сеансе, например. –

ответ

3

Используйте Message Store Interceptor, чтобы сохранить сообщение о действии в своем insertReview и получить его в своем действии insertReviewDone. Добавьте сообщение о действии в метод insertReview, когда вы возвращаете результат insertReviewDone.

Также используется результат redirectAction для перенаправления на действие вместо redirect.

+0

Отлично! Это то, что я искал. Большое спасибо! –

+0

Он отлично работает. Но у меня появился новый вопрос. Редактирование моего вопроса и размещение там. Я новичок так любезно даю мне какое-то предложение. –

+0

@ user2674752: Если у вас есть другой вопрос, задайте новый вопрос. –

1

Другой способ, менее технически чем (хороший) предложенному @AleksandrM, но подходит для всех рамок там, не только Struts2, чтобы разместить этот

<script> 
    $(document).ready(function() { 
     window.history.pushState("","", location.href); 
    }); 
</script> 

<head> в вашем разделе , Однако он не будет работать на старый браузер без возможностей HTML5.

Примечание: Часть jQuery не является обязательной, она используется только для обеспечения ее запуска после загрузки страницы, вы можете запустить HTML5 pushState() без нее.

+0

Что он будет делать? Это позволит избежать повторной отправки формы или удалит сообщение об успешном обновлении страницы? –

+0

Я использовал его для предотвращения двойных представлений и двойных сообщений, но никогда с Плитками. Просто попробуйте, надеюсь, что это поможет. –