【发布时间】:2014-01-09 15:42:25
【问题描述】:
嗨。
我正在尝试将 Spring MVC 与引导模式集成 - 具有过滤器区域我想从模式表单中选择项目并通过 jQuery ajax 将其设置为过滤器。
主要思想:当用户单击按钮选择项目时显示模式弹出窗口,此弹出窗口必须允许用户在列表(ajax)中搜索并单击提交按钮以选择项目。
为了刷新弹出数据,我返回带有过滤后的项目列表的 ModelAndView,然后,如果用户单击“提交”,我将选定的索引发送到服务器,在那里我可以通过列表中的索引获取 id,但 ModelMap(和 Model)也不包含这个清单。
我做错了什么?
我有以下结构:
主要 JSP:
main.jsp
....
<div class="override side-nav raised" id="filter">
<jsp:include page="filter.jsp"/>
</div>
....
filter.jsp
<f:form method="get" cssClass="search" action="${pageContext.request.contextPath}/search"
commandName="searchModel">
....
<div class="form-group">
<label class="control-label" for="searchDpt"><s:message code="label.department"/></label>
<div class="controls">
<f:input id="searchDpt" cssClass="form-control col-sm-8" cssStyle="width: 75%;" path="dept"/>
<button type="button" id="dsb_filter" class="btn btn-default col-sm-3" data-toggle="modal" data-target="#selectDeptModal"><span
class="glyphicon glyphicon-list"></span></button>
</div>
</div>
....
</f:form>
项目选择的模态窗口:
modal.jsp
<div id="selectDeptModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"
style="display: none;">
....
<div class="table-responsive" id="dept_table">
<jsp:include page="deptTable.jsp"/>
</div>
<button type="button" class="btn btn-default" onclick="selectDept();"><s:message code="label.select"/></button>
</div>
还有用于 ajax 搜索和发布数据的 jQuery 代码:
function search() {
$.ajax({
url: "departments",
data: "name=" + $("#dpt_filter").val(),
success: function (response) {
$("#dept_table").html(response);
}
});
}
function getSelectedIndex() {
var table = $("#dept_table").find("table")
var selectedRows = table.find("tr.selected-row");
var elements = [];
if (selectedRows.length > 0) {
table.find("tr.selected-row td.index-col").each(function (i, el) {
elements.push(parseInt($(el).text()));
});
}
return elements;
}
function selectDept() {
var selected = getSelectedIndex()[0];
if (selected == undefined || selected.length == 0) {
$("#no_selection").removeClass("hidden");
return;
}
$('#selectDeptModal').modal('hide');
$.ajax({
type: "POST",
url: "deptSelected",
data: { index: selected},
success: function (response) {
$("#filter").html(response);
}
});
}
处理 JavaScript 的控制器方法:
@RequestMapping(method = RequestMethod.GET, value = "departments")
public ModelAndView getDepartments(@RequestParam(required = false) String name, Model model) {
LOG.debug(name);
model.addAttribute("dpts", departmentService.filterByName(name));
return new ModelAndView("selectDeptDialog/deptTable");
}
@RequestMapping(method = RequestMethod.POST, value = "deptSelected")
public ModelAndView deptSelected(@RequestParam Long index, ModelMap model) {
SearchModel sModel = (SearchModel) model.get("searchModel");
sModel.setDept(index);
Object depts = model.get("dpts");// = null
return new ModelAndView("filter", model);
}
但是在 deptSelected 中获取部门列表时,它为空。
提前致谢!
【问题讨论】:
-
具体来说,什么是“不工作”?
-
抱歉问题解释不清楚。已编辑的问题 - 在 deptSelected 中获取部门列表时为空
-
您的 java 方法中的“index”是否为空?调试时你的 ModelMap 是什么样子的?
-
@ElGuapo 否,索引应为正数。 ModelMap 包含来自使用 ModelAttribute 注释的控制器方法的值。当我使用模型中的键值对从视图发送请求时,我希望这个键值对将在控制器方法中可用,处理这个请求。但是在填充“dpts”属性(model.addAttribute(“dpts”,departmentService.filterByName(name));)后,我无法在deptSelected方法中得到它,因为ModelMap不包含这样的键。
-
除非我读错了,否则您是否希望在服务调用之间维护两种方法中的模型?每次调用您的方法时都会重写模型(我很确定)。
标签: javascript jquery ajax spring twitter-bootstrap