3

フォームの再送信を避けるために、POST-Redirect-GET パターンを使用しましたが、問題なく動作しています。今、私の登録ページ(成功ページ)に、「Review Inserted successfully!」という 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";
}

編集 :

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 が削除され、表示されなくなります。どんな助けでも大歓迎です。

4

2 に答える 2

3

Message Store Interceptorアクションメッセージをアクションに保存insertReviewし、アクションで取得するために使用しますinsertReviewDoneinsertReview結果を返すときにメソッドにアクション メッセージを追加します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>
于 2013-09-20T10:33:49.277 に答える
1

@AleksandrMによって提案された(良い)方法よりも技術的ではありませんが、Struts2だけでなく、そこにあるすべてのフレームワークに適した別の方法は、これを配置することです

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

あなたの<head>セクションで。ただし、HTML5 機能のない古いブラウザーでは動作しません。

pushState()注: jQuery 部分は必須ではありません。ページがロードされた後に確実に実行されるようにするために使用されます。それなしでHTML5 を実行できます。

于 2013-09-20T12:21:31.013 に答える