【发布时间】:2014-11-10 20:34:30
【问题描述】:
我是 Spring MVC 的新手,所以请放轻松。
我很难理解如何在 Spring MVC 中实现以下要求:
- JSP 列表表单,用于从数据库中列出用户(服务、存储库的东西都工作正常)。
- 表单不受模型属性对象的支持。这是一个列表/查找表单!
- 我需要列出符合某些条件的用户,这些条件取自多个“过滤器”字段,例如:
- 地区(下拉列表)
- 是否已归档用户? (是/否下拉列表)
userList.jsp
<spring:url value="strFormAction" var="/rest/security/user/list" />
<form:form id="userListForm" method="GET" action="${strFormAction}" modelAttribute="user">
<form:select id="strRegionId" path="${strRegionId}" cssClass="form-control" onchange="updateUsersList('1');">
<spring:message var="strSelectRegionLabel" code="select.region" />
<form:option value="0" label="${strSelectRegionLabel}" />
<form:options items="${regions}" itemValue="intId" itemLabel="strNameFr" />
</form:select>
<form:select id="strArchived" path="${strArchived}" cssClass="form-control">
<spring:message var="strYesLabel" code="yes" />
<form:option value="true" label="${strYesLabel}"/>
<spring:message var="strNoLabel" code="no" />
<form:option value="false" label="${strNoLabel}"/>
</form:select>
<table>
...
<c:forEach items="${users}" var="user">
...rows generated here...
</c:forEach>
...
</table>
</form:form>
UserController.java
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String processUserList( @ModelAttribute("user") User user,
@RequestParam(value = "strRegionId", required = false) String strRegionId,
@RequestParam(value = "strArchived", required = false) String strArchived,
@RequestParam(value = "strSortBy", required = false) String strSortBy,
Model model) {
int intRegionId = strRegionId != null && strRegionId.equals("0") == false ? Integer.valueOf(strRegionId) : 0;
boolean booArchived = strArchived != null && strArchived.length() > 0 ? Boolean.valueOf(strArchived) : false;
int intSortBy = strSortBy != null && strSortBy.length() > 0 ? Integer.valueOf(strSortBy) : 1;
List<Region> regions = this.locationService.lstRegions();
model.addAttribute("strRegionId", String.valueOf(intRegionId));
model.addAttribute("strArchived", String.valueOf(booArchived));
model.addAttribute("strSortBy", String.valueOf(intSortBy));
List<User> users = this.securityService.listUsersByRegionAndArchiveState(intRegionId, booArchived, intSortBy);
model.addAttribute("user", new User());
model.addAttribute("users", users);
model.addAttribute("regions", regions);
return "user/userList";
}
如果不在表单中提供 modelAttribute,我似乎根本无法使用 Spring 表单标记库。然后我从我的控制器中放置了一个虚拟模型属性,但现在我得到了:
javax.servlet.ServletException:javax.servlet.jsp.JspException:org.springframework.beans.NotReadablePropertyException:bean 类 [spring4base.model.security.User] 的无效属性“0”:Bean 属性“0”不是可读或有无效的getter方法:getter的返回类型是否与setter的参数类型匹配?
正如我之前所说,该页面并不意味着由任何特定的 POJO 支持。这是一个搜索页面,它必须根据先前选择的过滤器(区域、归档状态)返回用户列表(用户实体 bean)。每次更改下拉列表时,表单都必须自行提交(用户选择一个区域,在同一个映射上完成提交,然后用户列表重新加载,仅包含来自该特定区域的用户)。
我来自 Struts 1,我们需要为每个页面创建 ActionForm。根据我从文档中看到的内容,这些天不需要表格,所以我真的很期待解决这个问题。
任何帮助将不胜感激。
【问题讨论】:
标签: spring spring-mvc