Spring MVC表单没有模型对象支持

我对Spring MVC很新,所以请对我很轻松.

我很难理解如何在Spring MVC中实现以下要求:

> JSP列表表单,从数据库列出用户(服务,存储库工作正常).
>表单不受模型属性对象的支持.这是一个列表/查找表单!
>我需要列出符合几个“过滤器”字段的标准的用户,例如:

>地区(下拉列表)
>用户是否已存档? (是/否下拉列表)

userList.jsp

ecurity/user/list" />
modelattribute="user">

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;

    ListecurityService.listUsersByRegionAndArchiveState(intRegionId,booArchived,intSortBy);

    model.addAttribute("user",new User());
    model.addAttribute("users",users);
    model.addAttribute("regions",regions);

    return "user/userList";
}

在我没有在表单中提供modelattribute的情况下,似乎根本无法使用Spring表单taglib.然后我从我的控制器中放置了一个虚拟的modelattribute,但现在我得到:

javax.servlet.servletexception:javax.servlet.jsp.JspException:org.springframework.beans.NotReadablePropertyException:bean类的属性’0’无效[spring4base.model.security.User]:Bean属性’0’不可读或没有无效的getter方法:getter的返回类型是否与setter的参数类型匹配?

正如我之前所说,该页面并不是由任何特定的POJO支持.这是一个搜索页面,必须根据之前选择的过滤器(区域,存档状态)返回用户列表(用户实体bean).每次更改下拉列表时,表单都必须自行提交(用户选择一个区域,提交在同一个映射上完成,然后用户列表仅重新加载来自该特定区域的用户).

我来自Struts 1,我们需要为每一页创建ActionForm.从我从文档中读到的内容来看,这些天不需要表单,所以我真的很期待解决这个问题.

任何帮助将不胜感激.

最佳答案
我只想创建包含搜索条件的辅助类,例如:

public class UserSearchCriteria {
    private String regionId;
    private Boolean archived;
    private String sortBy;

    // Getters and setters
}

然后我会像这样修改你的控制器方法(缺少一些代码,但这应该给你的想法).

@RequestMapping(value = "/list",method = RequestMethod.GET)
public String processUserList(@modelattribute("searchCriteria") UserSearchCriteria userSearchCriteria,Model model) {
    // Retrieve users and perform filtering based on search criteria
    ListecurityService.listUsers(searchCriteria);

    model.addAttribute("users",regions);

    return "user/userList";
}

然后你会使用你的过滤形式:

ecurity/user/list" var="formAction" />
modelattribute="searchCriteria">

您的代码段中的表单中有多个错误.例如,path属性接受包含要绑定的属性名称(或路径)的String,您传递了一些变量.你的< spring:url>中也有值和var切换.我认为.

尝试一下,这不是完整的解决方案,但希望它会给你一些如何实现这一点的指示.如果您遇到任何问题,请发表评论,我会更新答案.

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...