我是Spring MVC的新手,并通过网络上的一些教程。
在我的项目下的一个处理程序类中找到了下面的代码。
当表单提交给actionHistory时,调用将转到我的下面的处理程序方法
@RequestMapping(value="/userHistory", method=RequestMethod.GET)
public @ResponseBody UserDetails getUserHistory(Model model, HttpServletRequest request, HttpServletResponse response) {
model.addAttribute("userDetail", new userDetail());
}
DispatcherServlet是否构造空的Model对象并传递给处理程序方法getUserHistory?
同样当我从我的jsp提交动作“/ userDetail”时,我得到填充了所需数据的方法参数“userDetail”。
@RequestMapping(value="/userDetail", method=RequestMethod.POST)
public String userDetail(UserDetail userDetail, HttpServletRequest request, HttpServletResponse response, Locale locale)
{}
DispatcherServlet是在做这个还是其他一些拦截器?
更新: - JSP代码段
<form:form id="userForm" action="path/userDetail" method="post" commandName="userDetail">
答案 0 :(得分:2)
DispatcherServlet是否构造空的Model对象并传递给处理程序方法getUserHistory?
部分是,构造一个空模型,并将其传递给方法getUserHistory。但它并非由DispatcherServlet完成,而是HandlerMethodArgumentResolver的实现(在特定情况下是ModelMethodProcessor类)。当完成方法的匹配时,在实际调用该方法之前,会发生另一个进程,即参数解析。检查匹配方法的签名,弹簧已知的某些类型的对象由Spring自动解析和注入。类型在文档中定义,http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-methods检查字幕支持的方法参数类型下的列表。所有列出的类型都有一个注册HandlerMethodArgumentResolver实现,用于指导这些对象的创建
DispatcherServlet是在做这个还是其他一些拦截器?
回答第一个答案,您可以注册自定义参数解析器。这个great blog article告诉你实现一个你需要知道的一切。请注意,您所描述的 UserDetail 也可以是表单支持bean,其值绑定到提交表单的输入字段的值,这里是一个示例{{3 }}