自定义springMVC的属性编辑器主要有两种方式,一种是使用@InitBinder标签在运行期注册一个属性编辑器,这种编辑器只在当前Controller里面有效;还有一种是实现自己的 WebBindingInitializer,然后定义一个
AnnotationMethodHandlerAdapter的bean,在此bean里面进行注册
,这种属性编辑器是全局的。
第一种方式:
- import java.beans.PropertyEditorSupport;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.beans.propertyeditors.CustomDateEditor;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.WebDataBinder;
- import org.springframework.web.bind.annotation.InitBinder;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- @Controller
- public class GlobalController {
- @RequestMapping("test/{date}")
- public void test(@PathVariable Date date, HttpServletResponse response) throws IOException
- response.getWriter().write( date);
- }
- @InitBinder//必须有一个参数WebDataBinder
- public void initBinder(WebDataBinder binder) {
- binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false));
- binder.registerCustomEditor(int.class, new PropertyEditorSupport() {
- @Override
- public String getAsText() {
- // TODO Auto-generated method stub
- return getValue().toString();
- }
- @Override
- public void setAsText(String text) throws IllegalArgumentException {
- // TODO Auto-generated method stub
- System.out.println(text + "...........................................");
- setValue(Integer.parseInt(text));
- }
- });
- }
- }
import java.beans.PropertyEditorSupport; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class GlobalController { @RequestMapping("test/{date}") public void test(@PathVariable Date date, HttpServletResponse response) throws IOException response.getWriter().write( date); } @InitBinder//必须有一个参数WebDataBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false)); binder.registerCustomEditor(int.class, new PropertyEditorSupport() { @Override public String getAsText() { // TODO Auto-generated method stub return getValue().toString(); } @Override public void setAsText(String text) throws IllegalArgumentException { // TODO Auto-generated method stub System.out.println(text + "..........................................."); setValue(Integer.parseInt(text)); } }); } }
这种方式这样写了就可以了
第二种:
1.定义自己的WebBindingInitializer
- package com.xxx.blog.util;
- import java.util.Date;
- import java.text.SimpleDateFormat;
- import org.springframework.beans.propertyeditors.CustomDateEditor;
- import org.springframework.web.bind.WebDataBinder;
- import org.springframework.web.bind.support.WebBindingInitializer;
- import org.springframework.web.context.request.WebRequest;
- public class MyWebBindingInitializer implements WebBindingInitializer {
- @Override
- public void initBinder(WebDataBinder binder, WebRequest request) {
- // TODO Auto-generated method stub
- binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false));
- }
- }
package com.xxx.blog.util; import java.util.Date; import java.text.SimpleDateFormat; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.support.WebBindingInitializer; import org.springframework.web.context.request.WebRequest; public class MyWebBindingInitializer implements WebBindingInitializer { @Override public void initBinder(WebDataBinder binder, WebRequest request) { // TODO Auto-generated method stub binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false)); } }
2.在springMVC的配置文件里面定义一个AnnotationMethodHandlerAdapter,并设置其WebBindingInitializer属性为我们自己定义的WebBindingInitializer对象
- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
- <property name="cacheSeconds" value="0"/>
- <property name="webBindingInitializer">
- <bean class="com.xxx.blog.util.MyWebBindingInitializer"/>
- </property>
- </bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="cacheSeconds" value="0"/> <property name="webBindingInitializer"> <bean class="com.xxx.blog.util.MyWebBindingInitializer"/> </property> </bean>
第二种方式经过上面两步就可以定义一个全局的属性编辑器了。
注意:当使用了<mvc:annotation-driven />的时候,它 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean。这时候第二种方式指定的全局属性编辑器就不会起作用了,解决办法就是手动的添加上述bean。
转自iteye-234390216用户,http://haohaoxuexi.iteye.com/blog/1190065。
相关推荐
springmvc自定义属性编辑器和参数解析器
SpringMVC自定义属性编辑器详解及实例 自定义springMVC的属性编辑器主要有两种方式,一种是使用@InitBinder标签在运行期注册一个属性编辑器,这种编辑器只在当前Controller里面有效;还有一种是实现自己的 ...
Thymeleaf 是一个跟 Velocity、FreeMarker 类似的... Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。 这是3.0.5版中文参考手册,很好用。
简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 ... Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 ...3.Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
不多说,懂得人看名字就能知道,挺好的一套案例,包含讲解视频和完整案例。 ...访问权限拦截器-改善(监听器) │ 4.广告模块-文件上传分析5 Q+ T5 k V+ @! Z7 t │ 5.广告模块-文件上传功能实现 │ ...
3.4注册自定义属性编辑器 3.5使用spring的特殊bean 3.5.1后处理bean 3.5.2bean工厂的后处理 3.5.3配置属性的外在化 3.5.4提取文本消息 3.5.5程序事件的解耦 3.5.6让bean了解容器 3.6脚本化的bean 3.6.1给...