come faccio a registrare un Servizio di conversione in primavera 3 / webflow 2?

Ho cercato di seguire questo esempio e l’utilizzo di il riferimento mi guida, ma sto avendo alcuna fortuna.

Ho definito un convertitore di:

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

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

    }
}

e configurato:

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

(esplicita istanza mostra lo stesso errore)

Tuttavia, al momento di avvio, sono accolti con questa eccezione:

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

Sono profondamente perplesso perché non è il suo funzionamento. Il servizio di conversione implementa ConversionService attraverso la sua classe base, quindi non vedo il problema. Comprensione molto apprezzato!

In risposta a una risposta qui sotto, ho provato a cambiare il servizio di attuare la Conversione di servizio:

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

}
}

Ma ora non riesco in altro modo:

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

OriginaleL’autore nont | 2010-06-15

2 Replies
  1. 9

    Spring MVC e Spring Webflow utilizza diverse gerarchie di tipo convertitori. Così,
    <mvc:annotation-driven ...> richiede org.springframework.core.convert.ConversionService, ma <webflow:flow-builder-services ...> richiede org.springframework.binding.convert.ConversionService.

    Grazie! Che ha risolto il problema. Ho appena rimosso il “<mvc:annotazione-driven …>” po ‘ perché sono più interessati circa la forma di associazione in webflow, e meno regolare MVC mondo. Ora, il codice originale funziona senza errori.

    OriginaleL’autore

  2. 0

    Nel codice di cui sopra, si dovrebbe scrivere super(Date.class) invece super(StringToDateTwoWayConverter.class).

    OriginaleL’autore

Lascia un commento