通过注解实现SpringMVC, 一直按照Struts的思路去做传参,发现后台没有接收到前台的对象参数,试验了多种方法,终于发现了原因,在此做一下记录。
前台:
<form action="method" method="post">
<input name='id' value='张三'>
<input name='name' value='张三'>
<input name='sex' value='男'>
<input name='age' value='34'>
<input name='number' value='14512341345'>
<button type="submit">提交</button>
</form>
后台方法:
@Controller
public class SpringTest {
@RequestMapping(value="/method",method=RequestMethod.POST)
public ModelAndView method(UserInfo userInfo){
System.out.println(userInfo.getName());
System.out.println(userInfo.getSex());
ModelAndView view = new ModelAndView("success");
view.addObject("time",new Date());
return view;
}
}
注意:
1、在web.xml中一定要配置字符过滤器配置,否则中文传输到后台会发生乱码。
2、input表单中的name直接赋值为UserInfo的属性名称,不需要加对象名。
3、在Controller不需要UserInfo的get、set方法即可直接从前台获取对象。
4、form表单的method属性与方法注解中的method如果同时存在,两者一定要保持一致。
字符过滤器配置:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 指定编码格式 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- 无视客户端请求编码格式,都使用过滤器配置的编码去解析请求 -->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>