6.2.2 Spring支持的转换器 示例 使用WebBindingInitializer注册全局自定义编辑器转换数据
如果希望在全局范围内使用自定义的编辑器,则可以通过实现WebBindingInitializer
接口并在该实现类中注册自定义编辑器完成.
注册自定义编辑器
1 2 3 4 5 6 7 8 9 10 11
| public class DateBindingInitializer implements WebBindingInitializer { @Override public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(Date.class, new DateEditor()); } }
|
DateBindingInitializer
类实现WebBindingInitializer
接口,并在 initBinder()
方法中注册自定义编辑器DateEditorr
类.
自定义编辑器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 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(); } } }
|
在Spring配置文件中装配自定义编辑器
UserController
类中不需要再使用@initBinder
注解的方法来注册编辑器,而是在springmvc-config.xml
配置文件中配置全局的自定义编辑器。
1 2 3 4 5 6 7
| <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="webBindingInitializer"> <bean class="org.fkjava.binding.DateBindingInitializer" /> </property> </bean>
|
不能再使用默认装配方案
注意,这里使用了RequestMappingHandlerAdapter
装配自定义编辑器,不能再使用默认配置方案<mvc:annotation-driven />
。
领域对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class User implements Serializable { private static final long serialVersionUID = 1L; private String loginname; private Date birthday; public User() { super(); } @Override public String toString() { return "User [loginname=" + loginname + ", birthday=" + birthday + "]"; } }
|
测试连接
1
| <a href="registerForm">registerForm</a>
|
1 2 3 4 5 6
| @GetMapping(value = "/registerForm") public String registerForm() { return "registerForm"; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试WebBindingInitializer</title> </head> <body> <h3>测试WebBindingInitializer</h3> <form action="register" method="post"> <table> <tr> <td><label>登录名: </label></td> <td><input type="text" id="loginname" name="loginname"></td> </tr> <tr> <td><label>生日: </label></td> <td><input type="text" id="birthday" name="birthday"></td> </tr> <tr> <td><input id="submit" type="submit" value="登录"></td> </tr> </table> </form> </body> </html>
|
register请求处理方法
1 2 3 4 5 6 7 8
| @PostMapping(value = "/register") public String register(@ModelAttribute User user, Model model) { System.out.println(user); model.addAttribute("user", user); return "success"; }
|
测试
填写表单
显示效果
控制台输出
1
| User [loginname=小明, birthday=Sat May 06 00:00:00 CST 1234]
|
自定义的字符串转Date转换器运行成功。
原文链接: 6.2.2 Spring支持的转换器 示例 使用WebBindingInitializer注册全局自定义编辑器转换数据