Ajax返回表单modelattribute

时间:2015-12-01 12:17:53

标签: ajax jsp spring-mvc

我有以下情况。在方法 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文件中,我有一个带有modelattribute remindersListWrapper的表单。此jsp页面显示提醒表。每个提醒旁边都有一个复选框。用户可以检查几个复选框,单击按钮(&#34;标记为读取&#34;)并使用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设置为modelattribute。

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);
        }
    });
}

1 个答案:

答案 0 :(得分:0)

问题1:只需将返回类型更改为RemindersListWrapper并将其返回

问题2:由于您使用的是ajax,因此无法使用。您需要使用javascript来解析返回的列表并根据需要更新页面。