私は学校プロジェクトの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">×</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();
ステートメントでページをリロードすると、最初にそのアクションを呼び出さないという問題があります。別のレッスングループを追加すると、うまく動作します。
最初のページの更新時にアクションが呼び出されるようにするにはどうすればよいですか?私はこれに適切なアプローチを使用していますか?
POSTリクエストが送信された場合はまず、location.reloadは()のAjaxとしてPOSTリクエストのコールバックとして呼び出されなければなりません呼び出しは非同期です。 – geo
@geoどうすればいいですか?私は実際にそれを得ることはありません、私は動的にhtmlを置き換えたくない – Bas
あなたがここにチェックしてhttp://api.jquery.com/jquery.ajax/があるときに呼び出される関数である完全です。要求の終了(成功とエラーのコールバックが実行された後)私はこれが問題だが、投稿がリクエストされているときの実装が間違っているかどうかはわかりません。また、ここを見てくださいhttp://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean – geo