`
234390216
  • 浏览: 10237792 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462834
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775889
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398687
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395130
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680144
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:531107
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1184883
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468625
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151477
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68320
社区版块
存档分类
最新评论

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/>的前面。如果不生效,则将手动注册AnnotationMethodHandlerAdapter改为手动注册RequestMappingHandlerAdapter。

7
0
分享到:
评论
6 楼 di1984HIT 2014-10-30  
写的很好~~
5 楼 wpf5788 2013-01-27  
少年  你们俩把东西都贴出来  大家都学习学习
4 楼 234390216 2013-01-06  
wlxlz 写道
楼主邮件你了

我没有收到你的邮件。
3 楼 wlxlz 2013-01-06  
楼主邮件你了
2 楼 234390216 2013-01-06  
wlxlz 写道
引用

注意:当使用了<mvc:annotation-driven />的时候,它 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean。这时候第二种方式指定的全局属性编辑器就不会起作用了,解决办法就是手动的添加上述bean。

请问怎么手动添加啊?
我的配置文件是这样的:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
   		<property name="webBindingInitializer" >  
       		<bean class = "com.test.spring.controller.databinder.MyWebBindingInitializer"/>  
   		</property >  
	</bean>

	<context:component-scan base-package="com.test.spring.controller">
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
	</context:component-scan>
	
	<mvc:annotation-driven />

这样是没有问题的,属性编辑器只有在有对象需要进行转换的时候才会调用的。要是还有问题的话,你再多贴点文件给我看看,比如你自己的WebBindingInitializer和调用的Controller。也可以给我发邮件contactandy.126.com,晚上下班后有空可以回复你。
1 楼 wlxlz 2013-01-05  
引用

注意:当使用了<mvc:annotation-driven />的时候,它 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean。这时候第二种方式指定的全局属性编辑器就不会起作用了,解决办法就是手动的添加上述bean。

请问怎么手动添加啊?
我的配置文件是这样的:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
   		<property name="webBindingInitializer" >  
       		<bean class = "com.test.spring.controller.databinder.MyWebBindingInitializer"/>  
   		</property >  
	</bean>

	<context:component-scan base-package="com.test.spring.controller">
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
	</context:component-scan>
	
	<mvc:annotation-driven />

相关推荐

    springmvc自定义属性编辑器和参数解析器

    自定义属性编辑器需要继承`java.beans.PropertyEditorSupport`类,并重写`setAsText()`和`getAsText()`方法,前者用于将文本转换为对象,后者则是将对象转换为字符串。注册自定义属性编辑器可以通过`@InitBinder`...

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

    SpringMVC自定义属性编辑器详解及实例 自定义springMVC的属性编辑器主要有两种方式,一种是使用@InitBinder标签在运行期注册一个属性编辑器,这种编辑器只在当前Controller里面有效;还有一种是实现自己的 ...

    SpringMVC自定义参数绑定实现详解

    如果想多个Controller需要共同注册相同的属性编辑器,可以实现PropertyEditorRegistrar接口,并注入webBindingInitializer中。 自定义WebBindingInitializer可以注册多个属性编辑器,例如,可以注册一个日期类型的...

    j2eeGenerator-1.0_代码生成器_springmvc_springmvc代码生成_feltfjc_

    今天我们要讨论的是名为“j2eeGenerator-1.0”的代码生成器,它专门针对SpringMVC框架,由开发者feltfjc倾力打造。本文将详细介绍这个工具的特性和应用,以及如何利用它来快速构建包含BO(Business Object)、...

    详解SpringMVC注解@initbinder解决类型转换问题

    @InitBinder 注解的作用是初始化 WebDataBinder,用于绑定请求参数到指定的属性编辑器。WebDataBinder 是用来绑定请求参数到指定的属性编辑器。由于前台传到 controller里的值是 String 类型的,当往 Model 里 Set ...

    springmvc高级.docx

    6. **拦截器**:Spring MVC的拦截器机制允许我们在请求处理之前和之后执行自定义逻辑。拦截器可以用于日志记录、权限检查、性能统计等多种用途。通过实现`HandlerInterceptor`接口或继承`HandlerInterceptorAdapter`...

    ueditor与springmvc结合实例

    本篇文章将详细探讨如何将流行的富文本编辑器UEditor与SpringMVC框架整合,解决实际开发中的相关问题。 首先,UEditor是一款由百度开发的开源富文本编辑器,它提供了丰富的编辑功能,如文本格式化、图片上传、视频...

    springmvc+bootstrap+jsqumbile

    标题“springmvc+bootstrap+jsqumbile”表明这是一个关于使用Spring MVC框架、Bootstrap前端UI库以及jqGrid数据展示组件的项目。这三个技术是构建现代Web应用的常见组合,Spring MVC用于后端处理,Bootstrap用于前端...

    Springmvc注解文档

    此外,文章还提到了请求处理方法的签名规约,包括如何注册自定义的属性编辑器,以及如何准备数据等实践技巧。 总结来说,Spring MVC的注解功能使得配置更加简洁,降低了开发复杂性,提高了代码的可读性和可维护性。...

    springmvc 学习笔记

    此外,还可以使用属性编辑器(PropertyEditor)进行类型转换,比如将字符串转换为整数或浮点数。 为了处理多个请求,Spring MVC 提供了 `MultiActionController` 类,该类允许你为每个请求定义一个方法。方法签名...

    跟开涛学SpringMVC(4.6)Controller接

    方法级拦截器则可以通过@HandlerInterceptorAdapter实现,用于在请求处理前和后执行自定义逻辑。 总的来说,SpringMVC的Controller接口控制器是整个框架的入口点,它将HTTP请求映射到业务逻辑,并通过视图呈现结果...

    SpringMVC 数据绑定实例详解

    这些编辑器会将请求参数中的多个值转换为集合或 Map 类型。例如,如果有多个同名的请求参数,它们会被转换为一个 List 对象。 此外,SpringMVC 还支持数据验证。我们可以使用 JSR-303 或 Hibernate Validator 规范...

    springmvc类型转换.md

    在Spring 3.1之前的版本中,如果需要对特定类型的参数进行格式化或者转换,可以使用`@InitBinder`注解来注册一个自定义的编辑器(`CustomEditor`)或转换器(`Converter`)。下面是一个例子: ```java import org....

    ckfinder和ckeditor整合的demo

    3. 配置CKEditor:在CKEditor的配置文件中,设置“filebrowserBrowseUrl”和“filebrowserUploadUrl”属性指向CKFinder的URL,这样编辑器就能知道在哪里打开文件浏览器和上传文件。 4. 测试和调试:完成配置后,...

    SpringMVC实现Validation校验过程详解

    -- propertyEditorRegistrars用于属性编辑器 --&gt; &lt;!-- &lt;property name="propertyEditorRegistrars"&gt; &lt;list&gt; &lt;ref bean="customPropertyEditor" /&gt; &lt;/list&gt; &lt;/property&gt; --&gt; ``` 在上面的配置中,我们使用 `...

    springMVC三种数据转换的Demo

    接着,在Spring配置中注册这个自定义编辑器: ```java @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override public void initBinder(WebDataBinder binder) { ...

Global site tag (gtag.js) - Google Analytics