springmvc自定义属性编辑器详解及实例
自定义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));
}
});
}
}
这种方式这样写了就可以了
第二种:
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));
}
}
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>
第二种方式经过上面两步就可以定义一个全局的属性编辑器了。
注意:当使用了<mvc:annotation-driven />的时候,它 会自动注册defaultannotationhandlermapping与annotationmethodhandleradapter 两个bean。这时候第二种方式指定的全局属性编辑器就不会起作用了,解决办法就是手动的添加上述bean,并把它们加在<mvc:annotation-driven/>的前面。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!