`
cljspn
  • 浏览: 46909 次
  • 性别: Icon_minigender_1
  • 来自: 长春
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何解决自定义PropertyEditor问题

阅读更多

今天做了了一个自定义PropertyEditor出现问题,字符串解析错误。下面我把相应的类与自定义的PropertyEditor写出,希望有人帮我解决一下:

 

java 代码
  1. package org.beans.beanwrapper;   
  2.   
  3. public class Address {   
  4.     private String street;   
  5.   
  6.     private String doorNum;   
  7.   
  8.     private String postCode;   
  9.   
  10.     public String getStreet() {   
  11.         return street;   
  12.     }   
  13.   
  14.     public void setStreet(String street) {   
  15.         this.street = street;   
  16.     }   
  17.   
  18.     public String getDoorNum() {   
  19.         return doorNum;   
  20.     }   
  21.   
  22.     public void setDoorNum(String doorNum) {   
  23.         this.doorNum = doorNum;   
  24.     }   
  25.   
  26.     public String getPostCode() {   
  27.         return postCode;   
  28.     }   
  29.   
  30.     public void setPostCode(String postCode) {   
  31.         this.postCode = postCode;   
  32.     }   
  33. }   
java 代码
  1. package org.beans.beanwrapper;   
  2.   
  3. public class Person {   
  4.     private String name;   
  5.   
  6.     private Address address;   
  7.   
  8.     public String getName() {   
  9.         return name;   
  10.     }   
  11.   
  12.     public void setName(String name) {   
  13.         this.name = name;   
  14.     }   
  15.   
  16.     public Address getAddress() {   
  17.         return address;   
  18.     }   
  19.   
  20.     public void setAddress(Address address) {   
  21.         this.address = address;   
  22.     }   
  23.   
  24. }   
java 代码
  1. package org.beans.beanwrapper;   
  2.   
  3. import java.beans.PropertyEditorSupport;   
  4.   
  5. import org.springframework.util.StringUtils;   
  6.   
  7. public class AddressProptertyEditor extends PropertyEditorSupport {   
  8.     public void setAsTest(String text) {   
  9.         // 支持的格式为 streeValue,doorNumValue,postCode   
  10.             System.out.println("使用自己的编辑器。");      
  11.             if (text == null || !StringUtils.hasText(text)) {      
  12.                 throw new IllegalArgumentException("老大,不能为空啊!");      
  13.             }      
  14.             else     
  15.             {      
  16.                 String[] strArr = StringUtils.tokenizeToStringArray(text,",");      
  17.                 Address add = new Address();      
  18.                 add.setStreet(strArr[0]);      
  19.                 add.setDoorNum(strArr[1]);      
  20.                 add.setPostCode(strArr[2]);      
  21.                 setValue(add);      
  22.             }      
  23.         }      
  24. }   
java 代码
  1. package org.jms.beans.test;   
  2.   
  3. import junit.framework.TestCase;   
  4.   
  5. import org.springframework.context.ApplicationContext;   
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  7. import org.beans.beanwrapper.*;   
  8.   
  9. public class BeanWrapperTest extends TestCase {   
  10.     public void testWrapper() {   
  11.         ApplicationContext context = new ClassPathXmlApplicationContext(   
  12.                 "classpath:resource/applicationContext.xml");   
  13.   
  14.         Person person = (Person) context.getBean("person");   
  15.         System.out.println(person.getAddress());   
  16.            
  17.     }   
  18. }   

自定义PropertyEditor注册配置文件如下

xml 代码
  1. <bean id="customEditorConfigurer"  
  2.         class="org.springframework.beans.factory.config.CustomEditorConfigurer">  
  3.         <property name="customEditors">  
  4.             <map>  
  5.                 <entry key="org.beans.beanwrapper.Address"><!-- 属性类型 -->  
  6.                     <bean  
  7.                         class="org.beans.beanwrapper.AddressProptertyEditor" />  
  8.                     <!--对应Address的编辑器 -->  
  9.                 </entry>  
  10.             </map>  
  11.         </property>  
  12.     </bean>  
  13.   
  14.     <bean id="person" class="org.beans.beanwrapper.Person">  
  15.         <property name="name" value="Tom" />  
  16.         <property name="address" value="朝阳区,Soho 1601,010101">  
  17.         </property>  
  18.     </bean>  

出现问题的代码如下:

ruby 代码
  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'person' defined in class path resource [resource/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:   
  2. PropertyAccessException 1: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [org.beans.beanwrapper.Address] for property 'address'; nested exception is java.lang.IllegalArgumentException: 朝阳区,Soho 1601,010101   
  3. Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessException details (1) are:   
  4. PropertyAccessException 1:   
  5. org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [org.beans.beanwrapper.Address] for property 'address'; nested exception is java.lang.IllegalArgumentException: 朝阳区,Soho 1601,010101   
  6. Caused by: java.lang.IllegalArgumentException: 朝阳区,Soho 1601,010101   
  7.     at java.beans.PropertyEditorSupport.setAsText(Unknown Source)   
  8.     at org.springframework.beans.TypeConverterDelegate.convertValue(TypeConverterDelegate.java:253)   
  9.     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:177)   
  10.     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:127)   
  11.     at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:775)   
  12.     at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:608)   
  13.     at org.springframework.beans.AbstractPropertyAccessor.setPropertyValue(AbstractPropertyAccessor.java:49)   
  14.     at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:74)   
  15.     at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:57)   
  16.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:966)   
  17.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729)   
  18.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416)   
  19.     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)   
  20.     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)   
  21.     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)   
  22.     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)   
  23.     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:642)   
  24.     at org.jms.beans.test.BeanWrapperTest.testWrapper(BeanWrapperTest.java:27)   
  25.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   
  26.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)   
  27.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)   
  28.     at java.lang.reflect.Method.invoke(Unknown Source)   
  29.     at junit.framework.TestCase.runTest(TestCase.java:164)   
  30.     at junit.framework.TestCase.runBare(TestCase.java:130)   
  31.     at junit.framework.TestResult$1.protect(TestResult.java:110)   
  32.     at junit.framework.TestResult.runProtected(TestResult.java:128)   
  33.     at junit.framework.TestResult.run(TestResult.java:113)   
  34.     at junit.framework.TestCase.run(TestCase.java:120)   
  35.     at junit.framework.TestSuite.runTest(TestSuite.java:228)   
  36.     at junit.framework.TestSuite.run(TestSuite.java:223)   
  37.     at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)   
  38.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)   
  39.     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)   
  40.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)   
  41.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)   
  42.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)   
  43.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)   
  44.   
分享到:
评论

相关推荐

    Property Editor

    2. **README文件**:提供详细的安装和使用指南,包括可能遇到的问题和解决方案。 3. **LICENSE文件**:说明插件的许可协议,规定了用户可以如何使用和分发插件。 4. **图标和图片资源**:可能包含用于在Eclipse界面...

    第十五章 Spring 类型转换(Type Conversion)1

    Spring 为了解决这个问题,引入了更现代且更为灵活的类型转换系统。 Spring 3.0 引入了通用类型转换接口,包括 `Converter` 和 `GenericConverter`,它们提供了更为强大的类型转换功能,不仅限于简单的 String 到...

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

    SpringMVC 默认不支持这个格式的转换,因此需要手动配置,自定义数据的绑定才能解决这个问题。在需要日期转换的 Controller 中使用 SpringMVC 的注解 @InitBinder 和 Spring 自带的 WebDataBinder 类来操作。 @...

    spring-reference.pdf

    3. **自定义PropertyEditor**:Spring支持注册自定义的PropertyEditor,用于转换特定类型的属性值。 综上所述,Spring框架通过其强大的依赖注入机制和丰富的扩展点,为Java开发者提供了一个灵活、高效、可扩展的...

    XAF实现子导航栏

    通过研究这个解决方案,开发者可以学习到如何将自定义模板集成到XAF项目中,并应用于实际场景。 总的来说,使用自定义模版实现XAF子导航栏是一种提升应用界面美观度和用户体验的有效方式。它不仅展示了XAF的灵活性...

    自己写的转换器,包含各种基本的数据类型。

    这个过程通常涉及到Java的`java.beans.PropertyEditor`接口,通过注册自定义的`PropertyEditor`实例,可以在Struts的ActionForm或者Action中进行类型转换。 标签“类型转换器”进一步强调了这个压缩包内容的核心。...

    struts的form不能初始化java.util.Date类型

    - **使用PropertyEditor**:在ActionForm或Action类中注册一个自定义的`java.beans.PropertyEditor`,处理日期字符串到Date对象的转换。 - **使用Struts的datetime标签**:如果使用Struts的标签库,可以使用`...

    框架beanutils

    - 非标准getter/setter:对于非标准的getter和setter方法,BeanUtils可能无法正确识别,这时需要自定义PropertyEditor。 - 国际化支持:BeanUtils支持通过ResourceBundle进行属性值的国际化。 总之,Apache Commons...

    Spring MVC学习(七)-------SpringMVC数据类型转换

    - **线程安全性问题**:`PropertyEditor`的设计不是线程安全的,这意味着在多线程环境下使用时,需要为每个线程创建一个新的实例。 - **类型兼容性问题**:`setValue(Object)`方法接受任意类型的对象,这要求开发者...

    SpringMVC数据类型转换超详细介绍

    从Spring 3开始,SpringMVC引入了更为强大的数据绑定框架,解决了上述问题,并提供了更加灵活和强大的数据转换、验证及格式化能力。 ##### 1. 类型转换 - **核心组件**:`ConversionService`接口及其具体实现类`...

    XSS防攻击实现

    5. **InitBinder与自定义StringEscapeEditor**:在Spring MVC中,我们可以使用`@InitBinder`注解和自定义的`PropertyEditor`来处理参数绑定。例如,创建一个名为`StringEscapeEditor`的类,继承自`...

    struts2 类型转换器

    Struts2是一个非常流行的Java Web框架,它提供了一种优雅的方式来构建MVC(模型-视图-控制器...通过自定义类型转换器,我们可以解决框架默认转换机制无法满足的特殊需求,如复杂的对象序列化、自定义格式的日期处理等。

    endorphin2.7文档

    endorphin 提供了详尽的文档和教程,包括用户社区论坛,方便用户交流经验和解决问题。同时,官方支持渠道也随时准备解答疑问。 通过上述概述,我们可以看出 endorphin2.7 不仅是一款强大的虚拟世界模拟工具,更是...

    spring-prefixdatabinder

    1. 自定义前缀处理器:这通常是一个实现了Spring的`PropertyEditorRegistrar`接口的类,它会在数据绑定开始之前注册一个自定义的`PropertyEditor`,这个`PropertyEditor`能够处理带有前缀的属性名。 2. 前缀感知的`...

    qtpropertybrowser qt5

    - **自定义编辑器**:QtPropertyBrowser支持自定义编辑器,通过实现PropertyDelegate类,可以为特定类型的属性提供定制的输入控件。 - **事件处理**:通过信号和槽机制,处理属性值的改变事件,进行相应的业务逻辑...

    Core.Java.Vol.2.Advanced.Features.8th.Edition.pdf

    作者通过精心设计的示例程序,展示了最新的编程技巧和最佳实践,旨在帮助专业开发者解决实际工作中遇到的问题。 ### 1. Streams and Files 本书详细介绍了Java中的流和文件处理技术,包括输入/输出流(如...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.9. 公共问题的解决方案 9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 ...

Global site tag (gtag.js) - Google Analytics