欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringMVC自定义属性编辑器详解及实例

程序员文章站 2023-11-21 19:19:16
springmvc自定义属性编辑器详解及实例 自定义springmvc的属性编辑器主要有两种方式,一种是使用@initbinder标签在运行期注册一个属性编辑器,这种编辑...

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/>的前面。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!