我哪里做错了?为什么PropertEditorSupport不为我工作



为什么我在PropertyEditorSupport中得到行动?谁能在这里帮我一下,因为我是新来的春天。下面是错误报告

org.springframework.beans.factory.BeanCreationException:在类路径资源[propertyEdit.xml]中定义名称为'cont'的bean创建错误:初始化bean失败;org.springframework.beans.TypeMismatchException:无法将类型[java.lang.String]的属性值转换为属性'phone'所需的类型[Phone];嵌套异常是java.lang.IllegalArgumentException: 888-555-1212org.springframework.beans.TypeMismatchException:无法将类型[java.lang.String]的属性值转换为属性'phone'所需的类型[Phone];嵌套的
<>之前异常是java.lang.IllegalArgumentException: 888-555-1212原因:java.lang.IllegalArgumentException: 888-555-1212在java.beans.PropertyEditorSupport。setAsText(未知来源)org.springframework.beans.TypeConverterDelegate.doConvertTextValue (TypeConverterDelegate.java: 326)org.springframework.beans.TypeConverterDelegate.doConvertValue (TypeConverterDelegate.java: 305)org.springframework.beans.TypeConverterDelegate.convertIfNecessary (TypeConverterDelegate.java: 192)org.springframework.beans.TypeConverterDelegate.convertIfNecessary (TypeConverterDelegate.java: 138)org.springframework.beans.BeanWrapperImpl.convertForProperty (BeanWrapperImpl.java: 380)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues (AbstractAutowireCapableBeanFactory.java: 1111)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java: 861)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java: 421)在1.美元org.springframework.beans.factory.support.AbstractBeanFactory getobject (AbstractBeanFactory.java: 251)org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java: 156)org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java: 248)org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java: 160)org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java: 287)org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java: 352)在org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java: 91)在org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java: 75)在org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java: 65)在ShowContact.main (ShowContact.java: 9)之前

我在下面使用了java.beans.PropertyEditorSupport

public class PhoneEditor extends java.beans.PropertyEditorSupport{
    public void setAsTest(String textValue)
    {
        String stripped = stripNonNumeric(textValue);
        String areaCode=stripped.substring(0,3);
        String prefix=stripped.substring(3,6);
        String number=stripped.substring(6);
        Phone phone=new Phone(areaCode,prefix,number);
        setValue(phone);
    }
    private String stripNonNumeric(String original)
    {
        StringBuffer allNumeric = new StringBuffer();
        for(int i=0; i<original.length(); i++)
        {
            char c=original.charAt(i);
            if(Character.isDigit(c))
            {
                allNumeric.append(c);
            }
        }
        return allNumeric.toString();
    }
}

我的配置文件在

下面
<bean name="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <property name="customEditors">
<map>
<entry key="Phone">
<bean id="Phone" class="PhoneEditor">
</bean>
</entry>
</map>
</property>
</bean>
<bean id="cont" class="Contact">
<property name="name" value="Dhirendra"/>
<property name="phone" value="888-555-1212" /> 
</bean> 
</beans>

电话类在下面

public class Phone {
private String areaCode;
private String prefix;
private String number;
public Phone(){}
public Phone(String areaCode, String prefix, String number)
{
    this.areaCode=areaCode;
    this.prefix=prefix;
    this.number=number;
}
public String getPhoneNumber()
{
    return prefix+"-"+areaCode+"-"+number;
}
}

我用下面的方式打电话

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.beans.factory.config.CustomEditorConfigurer;

public class ShowContact {
    public static void main(String[] args)
    {
        ApplicationContext context = new ClassPathXmlApplicationContext("propertyEdit.xml");
        Employee employee=(Employee)context.getBean("cont");
        employee.PrintEmpDetails();
    }
}

下面是我的Contact类,它调用

public class Contact implements Employee {
private Phone phone;
private String name;
    public void setPhone(Phone phone) {
        // TODO Auto-generated method stub
    this.phone=phone;
    }
    public void setName(String name) {
        // TODO Auto-generated method stub
        this.name=name;
    }
    public void PrintEmpDetails()
    {
        System.out.println("Name of Employee :"+ name);
        System.out.println("Contact Number of Employee :"+ phone.getPhoneNumber());
    }
}

PhoneEditor中,您已经实现了setAsTest,而不是覆盖setAsText。结果,Spring在PropertyEditorSupport中调用setAsText的实现,这会抛出异常。

这就是为什么你应该总是使用@Override注释,并设置编译器至少在你不这样做时报告一个警告。

问题是你的类中有一个错别字。它是setAsText,而不是setAsTest:

@Override
public void setAsText(String textValue) throws IllegalArgumentException {
    final String stripped = stripNonNumeric(textValue);
    final String areaCode=stripped.substring(0,3);
    final String prefix=stripped.substring(3,6);
    final String number=stripped.substring(6);
    final Phone phone=new Phone(areaCode,prefix,number);
    setValue(phone);
}

(按照skaffman的建议,总是使用@Override)

相关内容

  • 没有找到相关文章

最新更新