加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

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

发布时间:2023-06-06 13:22:31 所属栏目:教程 来源:
导读:Spring MVC是通用的软件,这其中包括很多其他编辑器,本文是错新技术频道小编为大家带来的SpringMVC自定义属性编辑器详解及实例,希望对你学习有帮助。

自定义springMVC的属性编辑器主要有两种方式,一种是使用@
Spring MVC是通用的软件,这其中包括很多其他编辑器,本文是错新技术频道小编为大家带来的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/>的前面。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!