我在Spring 4.0.0 M3上教育自己以下是代码,
豆
package org.chebus.springs;
import java.util.Date;
public class Traingle {
private String name;
private int height;
private Date date;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public void drawShape() {
System.out.println(getName() + " Traingle height " + getHeight()
+ " Date = " + getDate());
}
}
Run Code Online (Sandbox Code Playgroud)
主要
ApplicationContext ctx = new ClassPathXmlApplicationContext("org/chebus/springs/Spring.xml");
Traingle traingle = ctx.getBean("traingle",Traingle.class);
traingle.drawShape();
Run Code Online (Sandbox Code Playgroud)
XML配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id = "traingle" class="org.chebus.springs.Traingle">
<property name="name" value = "RightAngled"/>
<property name="height" value = "20"/>
<property name="date" value = "2013-09-10"/>
</bean>
<bean id="dateEditor"
class="org.springframework.beans.propertyeditors.CustomDateEditor">
<constructor-arg>
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd" />
</bean>
</constructor-arg>
<constructor-arg value="true" />
</bean>
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date">
<ref local="dateEditor" />
</entry>
</map>
</property>
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
例外:
java.lang.IllegalArgumentException:无法将[org.springframework.beans.propertyeditors.CustomDateEditor]类型的值转换为属性'customEditors [java.util.Date]'所需的类型[java.lang.Class]:PropertyEditor [org.springframework .beans.propertyeditors.ClassEditor]在org.springframework.beans.TypeConverterDelegate.convertToTypedMap的org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:260)返回了类型[org.springframework.beans.propertyeditors.CustomDateEditor]的不适当值. (TypeConverterDelegate.java:620)org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:205)org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:459)... 17更多
不知道我哪里错了.感谢您的帮助.谢谢!
Bij*_*men 23
好的捕获,这似乎是Spring 4.0+的新行为,你的代码与3.2.x版本的Spring一起干净利落.
原因似乎是因为Spring 4.0+已经改变了customEditors
in
的类型CustomEditorConfigurer
.虽然它是Map<String, ?>
Spring 3.2.x 的类型,但它是Map<Class<?>, Class<? extends PropertyEditor>>
Spring 4.0+.
修复方法是改为创建自定义PropertyEditorRegistrar,这样:
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.PropertyEditorRegistrar;
import org.springframework.beans.PropertyEditorRegistry;
import org.springframework.beans.propertyeditors.CustomDateEditor;
public class CustomDateEditorRegistrar implements PropertyEditorRegistrar {
@Override
public void registerCustomEditors(PropertyEditorRegistry registry) {
registry.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false));
}
}
Run Code Online (Sandbox Code Playgroud)
并在配置中使用它:
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="propertyEditorRegistrars">
<list>
<bean class="dateeditor.CustomDateEditorRegistrar"/>
</list>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12122 次 |
最近记录: |