Struts2 页面刷新时未调用操作

Struts2 action not being called on page refresh

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

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

<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 post 请求工作,看起来像这样:

$("#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(); 语句重新加载页面,它不会调用操作第一次。当我添加另一个课程组时,它工作得很好。

我怎样才能让 Action 在第一页刷新时被调用?我为此使用了正确的方法吗?

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

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

需要 json 插件才能 return 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));
            }
        });
    }        
});