我有以下情况。在方法 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);
}
});
}
答案 0 :(得分:0)
问题1:只需将返回类型更改为RemindersListWrapper
并将其返回
问题2:由于您使用的是ajax,因此无法使用。您需要使用javascript来解析返回的列表并根据需要更新页面。