2010-06-15 27 views
5

Tôi đã cố gắng theo dõi this example và sử dụng the reference để hướng dẫn tôi, nhưng tôi không có may mắn.làm cách nào để đăng ký Dịch vụ chuyển đổi tùy chỉnh vào mùa xuân 3/luồng web 2?

tôi đã xác định chuyển đổi:

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); 
    } 
} 

và 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()); 

    } 
} 

và cấu hình nó:

<mvc:annotation-driven conversion-service="conversionService" /> 
<webflow:flow-builder-services id="flowBuilderServices" conversion-service="conversionService" .../> 

(instantiation rõ ràng cho thấy các lỗi tương tự)

Tuy nhiên, khi khởi động, tôi được chào đón với ngoại lệ này:

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 

Tôi hoàn toàn bối rối vì sao nó không hoạt động. Dịch vụ chuyển đổi triển khai ConversionService thông qua lớp cơ sở của nó, vì vậy tôi không thấy vấn đề. Bất kỳ cái nhìn sâu sắc nào được đánh giá cao!

Để đối phó với một câu trả lời dưới đây, tôi đã cố gắng thay đổi dịch vụ để thực hiện các dịch vụ chuyển đổi khác:

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()); 

} 
} 

Nhưng bây giờ tôi không phải là cách khác:

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 

Trả lời

9

Spring MVC và Spring Webflow sử dụng các hệ thống phân cấp khác nhau của các trình biến đổi kiểu. Vì vậy, <mvc:annotation-driven ...> yêu cầu org.springframework.core.convert.ConversionService, nhưng <webflow:flow-builder-services ...> yêu cầu org.springframework.binding.convert.ConversionService.

+2

Cảm ơn! Điều đó giải quyết được vấn đề. Tôi vừa xóa phần "" vì tôi chủ yếu quan tâm đến việc ràng buộc biểu mẫu trong luồng web và ít hơn trong thế giới MVC thông thường. Bây giờ, mã ban đầu hoạt động mà không có lỗi. – nont

0

Trong mã trên, bạn nên viết super(Date.class) thay vì super(StringToDateTwoWayConverter.class).

Các vấn đề liên quan