SpringMVC在支持新的转换器框架的同时,也支持JavaBeans的PropertyEditor.可以在控制器中使用@InitBinder添加自定义的编辑器.
1.表单视图
<form method="post" action="register"> 姓名<input type="text" name="loginname" /> <br> 生日<input type="text" name="birthday" /> <input type="submit" /> </form>
2.数据展示视图
<h3>loginname:${user.loginname}</h3> <h3>birthday:<fmt:formatDate value="${user.birthday}" pattern="yyyy年MM月dd日" /></h3>
3.模型
public class User implements Serializable { private String loginname; private Date birthday; public User() { super(); } ...
4.Date类型编辑器
package org.fkit.converter; import java.beans.PropertyEditorSupport; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateEditor extends PropertyEditorSupport { @Override public void setAsText(String text) throws IllegalArgumentException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date date = dateFormat.parse(text); setValue(date); } catch (ParseException e) { e.printStackTrace(); } } }
5.控制器
在UserController()方法中添加一个initBinder方法,并使用@InitBinde注释会在控制器初始化时注册属性编辑器.WebDataBinder对象用于处理请求消息和处理方法的绑定工作.binder.registerCustomEditor方法将传入的Dete类型使用DateEditor类进行转换.
@Controller @RequestMapping("/user/") public class UserController { //在控制器初始化时注册属性编辑器 @InitBinder public void initBinder(WebDataBinder binder) { //注册自定义编辑器 binder.registerCustomEditor(Date.class, new DateEditor()); } @RequestMapping("register") public String registor( ) { return "user/register"; } @RequestMapping(value="register",method=RequestMethod.POST) public String registerPost( @ModelAttribute User user, Model model ) { model.addAttribute("user", user); return "user/sucess"; } }
成功将String转换为Date!