[英]how do I register a custom conversion Service in spring 3 / webflow 2?
I've been trying to follow this example and using the reference to guide me, but I'm having no luck. 我一直试图按照这个例子并使用引用来指导我,但我没有运气。
I've defined a converter: 我已经定义了一个转换器:
import org.springframework.binding.convert.converters.StringToObject;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
public class StringToDateTwoWayConverter extends StringToObject {
private DateFormat format = null;
public StringToDateTwoWayConverter () {
super(StringToDateTwoWayConverter.class);
format = new SimpleDateFormat("MM/dd/yyyy");
}
@Override
protected Object toObject(String string, Class targetClass) throws Exception {
Date date = null;
try {
date = format.parse(string);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
return date;
}
@Override
protected String toString(Object object) throws Exception {
Date date = (Date) object;
return format.format(date);
}
}
and a conversionService: 和转换服务:
import org.springframework.binding.convert.service.DefaultConversionService;
import org.springframework.stereotype.Component;
@Component("conversionService")
public class ApplicationConversionService extends DefaultConversionService
{
@Override
protected void addDefaultConverters() {
super.addDefaultConverters();
this.addConverter(new StringToDateTwoWayConverter());
this.addConverter("shortDate", new StringToDateTwoWayConverter());
}
}
and configured it: 并配置它:
<mvc:annotation-driven conversion-service="conversionService" />
<webflow:flow-builder-services id="flowBuilderServices" conversion-service="conversionService" .../>
(explicit instantiation shows the same error) (显式实例化显示相同的错误)
However, upon startup, I'm greeted with this exception: 但是,在启动时,我遇到了这个例外:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name '(inner bean)': Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.core.convert.ConversionService]: Could not convert constructor argument value of type [com.yadayada.converter.ApplicationConversionService] to required type [org.springframework.core.convert.ConversionService]: Failed to convert value of type 'com.yadayada.converter.ApplicationConversionService' to required type 'org.springframework.core.convert.ConversionService'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.yadayada.converter.ApplicationConversionService] to required type [org.springframework.core.convert.ConversionService]: no matching editors or conversion strategy found
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:687)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:195)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:993)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:897)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:270)
... 60 more
I'm thoroughly puzzled why its not working. 我完全不解为什么它不起作用。 The conversion service implements ConversionService through its base class, so I don't see the problem. 转换服务通过其基类实现ConversionService,所以我没有看到问题。 Any insight much appreciated! 任何见解都非常感谢!
In response to an answer below, I tried changing the service to implement the other Conversion service: 在回答下面的答案时,我尝试更改服务以实现其他转换服务:
import org.springframework.stereotype.Component;
import org.springframework.core.convert.ConversionService;
import org.springframework.format.support.FormattingConversionService;
@Component ("conversionService")
public class ApplicationConversionService extends FormattingConversionService implements org.springframework.core.convert.ConversionService
{
public ApplicationConversionService() {
this.addConverter(new StringToDateConverter2());
}
}
But now I fail the other way: 但现在我失败了:
Caused by: java.lang.IllegalStateException: Cannot convert value of type [com.yadayada.converter.ApplicationConversionService] to required type [org.springframework.binding.convert.ConversionService] for property 'conversionService': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:291)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:461)
... 86 more
Spring MVC and Spring Webflow uses different hierarchies of type converters. Spring MVC和Spring Webflow使用不同的类型转换器层次结构。 So, <mvc:annotation-driven ...>
requires org.springframework.core.convert.ConversionService
, but <webflow:flow-builder-services ...>
requires org.springframework.binding.convert.ConversionService
. 因此, <mvc:annotation-driven ...>
需要org.springframework.core.convert.ConversionService
,但<webflow:flow-builder-services ...>
需要org.springframework.binding.convert.ConversionService
。
在上面的代码中,您应该编写super(Date.class)
而不是super(StringToDateTwoWayConverter.class)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.