2017-03-23 10 views
1

私は学校プロジェクトのCRUDアプリケーションを作成しています。ここには、追加または削除できる「レッスングループ」のリストがあります。Struts2アクションがページリフレッシュで呼び出されない

私はあなたがそれを提出するボタンを入力レッスングループ名をして押すことができ、このようになりますブートストラップモーダルを、持っている:ボタンは、JavaScriptのAJAXのPOSTリクエストで動作します

<div class="modal fade" id="lessonGroupAddModal" tabindex="-1" role="dialog" 
    aria-labelledby="lessonGroupAddModalLabel" aria-hidden="true"> 
    <div class="modal-dialog" role="document"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
       <h5 class="modal-title" id="lessonGroupAddModalLabel">Les groep toevoegen</h5> 
       <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
        <span aria-hidden="true">&times;</span> 
       </button> 
      </div> 
      <div class="modal-body"> 
       <form class="addLessonGroupForm" role="form"> 
        <div class="form-group"> 
         <label for="lessonGroupName-input" class="col-2 col-form-label">Naam</label> 
         <div class="col-10"> 
          <input class="form-control" type="text" value="" id="lessonGroupName-input"> 
         </div> 
        </div> 
       </form> 
      </div> 
      <div class="modal-footer"> 
       <button type="button" class="btn btn-secondary" data-dismiss="modal">Sluiten</button> 
       <button id="addLessonGroupButton" type="button" class="btn btn-primary">Toevoegen</button> 
      </div> 
     </div> 
    </div> 
</div> 

、これは次のようになりますこの:

$("#addLessonGroupButton").on("click", function() { 
    if($("input[type=text]#lessonGroupName-input").val()) { 
     $.ajax({ 
      type: 'POST',  
      url:'lessongroup/add.action', 
      dataType: 'json', 
      data : "lessonGroupName="+$("input[type=text]#lessonGroupName-input").val(), 
     }); 
    } 
    location.reload(); 
}); 

私はこのために使用しているアクションメソッドは次のようになります。

public String addLessonGroup() { 
    if (this.lessonGroupName == null || this.lessonGroupName.equals("")) { 
     return ERROR; 
    } 
    LessonGroup previousLessonGroup = this.getLessonGroups().last(); 

    TestDAOLessonGroup.getInstance().create(new LessonGroup(previousLessonGroup.getId() + 1, lessonGroupName)); 
    System.out.println("added lesson group with name " + lessonGroupName); 
    return SUCCESS; 
} 

TestDAOLessonGroupはそのオブジェクトを保存するシングルトンです。オブジェクトが1回だけ作成されていることを100%確信しています。

コントローラの実行方法は、次のようになります。

public String execute() { 
    if (lessonGroups == null) { 
     lessonGroups = new TreeSet<>(); 
    } 
    lessonGroups.clear(); 
    lessonGroups.addAll(TestDAOLessonGroup.getInstance().getLessongroups()); 
    return SUCCESS; 
} 

これは私がビューに取得しています変数の中に最新のレッスン・グループを置きます。

マイstruts.xmlアクションマッピングは、次のようになります

<action name="lessongroup" class="employeemanagement.LessonGroupListingAction" 
     method="execute"> 
    <result name="success">index.jsp</result> 
</action> 

私はこのマッピングが機能する100%確信している、とレッスンgrouupsがビューに読み込まなっています。

問題は、ポストリクエストを介してDAOに新しいレッスングループを追加し、location.reload();ステートメントでページをリロードすると、最初にそのアクションを呼び出さないという問題があります。別のレッスングループを追加すると、うまく動作します。

最初のページの更新時にアクションが呼び出されるようにするにはどうすればよいですか?私はこれに適切なアプローチを使用していますか?

+0

POSTリクエストが送信された場合はまず、location.reloadは()のAjaxとしてPOSTリクエストのコールバックとして呼び出されなければなりません呼び出しは非同期です。 – geo

+0

@geoどうすればいいですか?私は実際にそれを得ることはありません、私は動的にhtmlを置き換えたくない – Bas

+0

あなたがここにチェックしてhttp://api.jquery.com/jquery.ajax/があるときに呼び出される関数である完全です。要求の終了(成功とエラーのコールバックが実行された後)私はこれが問題だが、投稿がリクエストされているときの実装が間違っているかどうかはわかりません。また、ここを見てくださいhttp://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean – geo

答えて

0

URLはアクションにマッピングされていません。あなたはJSON形式のプラグインがjsonタイプの結果を返すように要求され

<action name="add" class="employeemanagement.LessonGroupListingAction" 
     method="add"> 
    <result type="json"/> 
</action> 

を追加する必要があります。

このアクションは、Ajaxの呼び出しでURLにマッピングする必要があり

$("#addLessonGroupButton").on("click", function() { 
    if($("input[type=text]#lessonGroupName-input").val()) { 
     $.ajax({ 
      type: 'POST',  
      url:'add.action', 
      dataType: 'json', 
      data : "lessonGroupName="+$("input[type=text]#lessonGroupName-input").val(), 
      success: function(data) { 
       console.log(JSON.stringify(data)); 
      } 
     }); 
    }   
}); 
+0

マッピングを別のパッケージに入れる必要がありますか? 'struts .xml'ファイル? – Bas

+0

URLは現在のパッケージ/名前空間からの相対パスです。別のパッケージが必要な場合は、URLを変更する必要があります。 's:url'タグを使用することをお勧めしますが、ハードコードされたURLを使用するので、それはあなた次第です。あなたがそれをアップヴォートする必要がある答えを受け入れる場合にも注意してください。 –

関連する問題