Java 使用Get请求的Spring MVC绑定命令对象
我需要实现一个控制器,该控制器有一个命令对象,该对象支持一个过滤表单,用于跨多个条目进行搜索 问题是,我被要求在不使用POST请求的情况下执行此操作,而只使用GET请求,在失去springs为我们提供的默认数据绑定功能之前 因此,我尝试在我的控制器内实现一种方法,如下所示:Java 使用Get请求的Spring MVC绑定命令对象,java,spring,spring-mvc,Java,Spring,Spring Mvc,我需要实现一个控制器,该控制器有一个命令对象,该对象支持一个过滤表单,用于跨多个条目进行搜索 问题是,我被要求在不使用POST请求的情况下执行此操作,而只使用GET请求,在失去springs为我们提供的默认数据绑定功能之前 因此,我尝试在我的控制器内实现一种方法,如下所示: @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws Exception {
if (isSearchRequest(request)) {
MyCommandObject myCommandObject = (MyCommandObject) getCommand(request);
System.out.println(managePositionsForm);
}
return super.handleRequestInternal(request, response);
}
但是getCommand返回一个全新的CommandObject,没有任何值,尽管这些值存在于请求对象中(然后我可以使用HttpServletRequest的getParameter方法进行检索)。但没有任何约束力
因此,问题是:
1) 有没有办法把这个存档
2) 同样非常重要的是,表单中的所有值都会丢失,最终(如果这个问题得到解决),我需要为用户“持久化”过滤器,以避免在第一次搜索后重新输入
- 自动响应:setSessionForm(真);看起来我能做这项工作!(根据javadoc)
维克多。好的,我找到了一种方法来归档a所寻找的内容 我将为那些以前有同样问题的人解释,并希望找到一个有经验的用户来验证这个方法。。。一个很常见的现象是,做同一件事有多种方法,如果没有正确的认知,人类很难知道正确的道路。。因此,我在AbstractFormController(javadoc很好地记录了它)中发现了这一点 因此,我做了如下操作,在控制器构造函数的末尾添加了以下几行:
setSessionForm(true);
setBindOnNewForm(true);
这就是所有的魔法
但是setSessionForm(true)还不够。根据javadoc,setBindOnNewForm(布尔)方法执行以下操作:
/**
* Set if request parameters should be bound to the form object
* in case of a non-submitting request, i.e. a new form.
*/
所以我猜这两个标志必须标记为true,因为:
- setSessionForm允许将form对象存储为会话属性,因此“存储在会话中以在请求之间保留form对象实例,而不是在每个请求上创建一个新实例”(根据setSessionForm方法的javadoc)
- setBindOnNewForm允许使用初始请求填充表单对象(不管我们有什么类型的请求方法)。根据javadoc发现的“仅当bindOnNewForm设置为true时,才应用ServletRequestDataBinder以使用初始请求参数填充新表单对象…”
您好。您似乎在说您不能使用GET(仅在第二段后)将数据绑定到命令对象?这是不正确的-GET也能工作!谢谢!您能告诉我怎么做,或者在哪里我能找到一个解释来解释这一点吗?您是说setSessionForm(true)发挥了所有的魔力?