【问题标题】:Ajax return form modelattributeAjax 返回表单模型属性
【发布时间】:2015-12-01 12:17:52
【问题描述】:

我有以下情况。在方法 viewUserReminders 的控制器中,我将remindersListWrapper 传递给我的uReminder.jsp 页面。

@RequestMapping(value = "/user/reminders", method = RequestMethod.GET)
    public ModelAndView viewUserReminders(Model model, @ModelAttribute("id_users") Long id_users) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("user/uReminders");
        List<Reminders> remindersList=userService.getUserReminders(id_users);
        RemindersListWrapper remindersListWrapper=new RemindersListWrapper();
        remindersListWrapper.setRemindersList(remindersList);
        mv.addObject("remindersListWrapper", remindersListWrapper);
        return mv;
    }

在我的 uReminders.jsp 文件中,我有一个带有 modelattributeremindersListWrapper 的表单。此 jsp 页面显示提醒表。每个提醒旁边都有一个复选框。用户可以检查几个复选框,单击按钮(“标记为已读”)并使用 Ajax 我提交表单并转到控制器方法 readReminders().

uReminders.jsp

<form:form action="/user/ajax/reminders/readReminders" method="POST" modelAttribute="remindersListWrapper" id="remindersForm">
      <div id="main">
        <table class="table">
          <thead>
            <tr>
              <th></th>
              <th></th>
              <th>Reminder</th>
            </tr>
          </thead>
          <tbody>
            <c:choose>
              <c:when test="${not empty remindersListWrapper.remindersList}">
                <c:forEach items="${remindersListWrapper.remindersList}" varStatus="status" var="reminders">
                  <tr id="row">
                    <td><form:hidden path="remindersList[${status.index}].idCalendar"/></td>
                    <td><form:checkbox path="remindersList[${status.index}].isRead"/></td>
                    <td><form:input path="remindersList[${status.index}].endDate"/></td>
                  </tr>
                </c:forEach>
              </c:when>
              <c:when test="${empty remindersListWrapper.remindersList}">
                <tr>
                  <td colspan="3">You have no reminders.</td>
                </tr>
              </c:when>
            </c:choose>
          </tbody>
        </table>
      <c:choose>
        <c:when test="${not empty remindersListWrapper.remindersList}">
          <input type="button" id="reminders" value="Mark as read"/>
        </c:when>
      </c:choose>
    </div>
</form:form>

$(window).load(function () {
    $("#reminders").click(function () {
        sendAjax('readReminders', $("#remindersForm").serialize());
    });
});

在这种方法中,我保存已读提醒,并使用新的提醒列表构建 newRemindersListWrapper(我想删除选中的提醒并仅显示未选中的提醒)。 我的第一个问题是:如何返回newRemindersListWrapper本身的页面。

@RequestMapping(value = "/user/ajax/reminders/readReminders", method = RequestMethod.POST)
    @ResponseBody
    public String readReminders(@ModelAttribute("remindersListWrapper") RemindersListWrapper remindersListWrapper, @ModelAttribute("id_users") Long id_users) throws Exception {
        for(Reminders reminders:remindersListWrapper.getRemindersList()){
            if(reminders.getIsRead()){
                userDao.saveReadReminders(reminders);
            }
        }
        RemindersListWrapper newRemindersListWrapper=new RemindersListWrapper();
///////////////////
here I want to return the newRemindersListWrapper itself
//////////////////
    }

我的第二个问题是:如何在我的表单中将 newRemindersListWrapper 设置为模型属性。

function sendAjax(ref, data) {
    console.log(data);
    $.ajax({
        url: 'ajax/reminders/' + ref,
        type: 'POST',
        data: data,
        success: function (response) {
            ////////////////////////////////
            I want to get newRemindersListWrapper and set it as modelattribute in form.
            ////////////////////////////////
            console.log("success");
        },
        error: function (request, status, error) {
            console.log('error ' + ref + ' text=' + request.responseText + ' status = ' + status + ' error = ' + error);
        }
    });
}

【问题讨论】:

    标签: ajax jsp spring-mvc


    【解决方案1】:

    问题一:只需将返回类型改为RemindersListWrapper并返回即可

    问题 2:由于您使用的是 ajax,所以不能。您需要使用javascript解析返回的列表并根据需要更新页面。

    【讨论】:

      猜你喜欢
      • 2019-05-12
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多