页面刷新时未调用 Struts2 操作



我正在为一个学校项目制作一个 CRUD 应用程序,其中有一个"课程组"列表,您可以添加或删除。

我有一个看起来像这样的引导模式,您可以在其中输入课程组名称并按按钮提交:

<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>

该按钮通过JavaScript AJAX发布请求工作,如下所示:

$("#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是一个保存该对象的单例,我 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% 确定此映射有效,并且课程组正在视图中加载。

问题是,当您通过 post 请求将新的课程组添加到 DAO 时,它通过location.reload();语句重新加载页面,它不会第一次调用该操作。当我添加另一个课程组时,它工作得很好。

如何使操作在第一次页面刷新时被调用?我是否为此使用了正确的方法?

url 未映射到操作。您应该添加

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

需要 json 插件才能返回json类型结果。

此操作应映射到 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));
}
});
}        
});

最新更新