6 Stimmen

Wie kann man das Standardformat in StringToDate ändern? Spring WebFlow

Das Standard-Datumsformat in Spring WebFlow ist "jjjj-MM-tt".

Wie kann man in ein anderes Format wechseln? Zum Beispiel "tt.mm.jjjj".

4voto

John Vint Punkte 38604

Entschuldigen Sie den späten Beitrag, aber hier ist, was Sie tun müssen. Spring Webflow tut benutzerdefinierte Data Binding. Es ist ähnlich, wie Spring MVC es tut. Der Unterschied ist jedoch, wo es gehandhabt wird. Spring MVC behandelt es auf Controllerebene (mit @InitBinder).

Spring Webflow erledigt dies auf der Bindungsebene. Vor der Ausführung einer Transition bindet Webflow alle Parameterwerte an das Objekt und validiert dann das Formular (wenn validate="true") und ruft bei erfolgreicher Validierung die Transition auf.

Sie müssen Webflow dazu bringen, die Art und Weise zu ändern, in der es ein Datum bindet. Sie können dies tun, indem Sie einen benutzerdefinierten Konverter schreiben.

Zunächst benötigen Sie einen Konvertierungsdienst:

@Component("myConversionService")
public class MyConversionService extends  DefaultConversionService {

    public void MyConversionService() {

    }
}

Webflow nutzt diesen Dienst, um zu ermitteln, welche speziellen Bindungen berücksichtigt werden müssen. Schreiben Sie nun einfach Ihren spezifischen Datumsbinder (denken Sie daran, dass Webflow einen Datumsbinder vorgibt, den Sie einfach überschreiben können).

@Component
public class MyDateToString extends StringToObject {

    @Autowired
    public MyDateToString(MyConversionService conversionService) {
        super(Date.class);
        conversionService.addConverter(this);
    }

    @Override
    protected Object toObject(String string, Class targetClass) throws Exception {
        try{
            return new SimpleDateFormat("MM\dd\yyyy").parse(string);//whatever format you want
        }catch(ParseException ex){
            throw new ConversionExecutionException(string, String.class, targetClass, Date.class);//invokes the typeMissmatch
        }       
    }
}

0 Stimmen

Ich versuche, einen Konvertierungsdienst für eine viele-zu-viele-Beziehung zu tun. Blick auf Ihre Antwort, muss ich hinzufügen, BEIDE Klassen ("MyConversionService" und "MyDateToString") oder MyDateToString ist eine spezifische Implementierung von MyConversionService? dann, was muss ich in MyConversionService setzen? danke

0 Stimmen

@lethal.industry Sie müssen die MyConversionService und fügen Sie Ihre MyDateToString zu diesem Konvertierungsdienst. Sie müssen also beide erstellen. MyDateString implementiert keinen ConversionService

0 Stimmen

Hmm sorry, aber für mich ist es nicht klar. können Sie mir bitte ein Beispiel geben? Ich muss einen String zu @OneToMany Set<MyEntity> Konverter erstellen

2voto

Das habe ich mit der Erstellung dieser Bohne erreicht:

@Component(value = "applicationConversionService") public class ApplicationConversionServiceFactoryBean erweitert FormattingConversionServiceFactoryBean {

@Override
protected void installFormatters(FormatterRegistry registry) {
  // Register the default date formatter provided by Spring
  registry.addFormatter(new DateFormatter("dd/MM/yyyy"));
} }

So wird die Bohne registriert:

<bean id="defaultConversionService" class="org.springframework.binding.convert.service.DefaultConversionService">
    <constructor-arg ref="applicationConversionService" />
</bean>

Dann referenziert von:

<mvc:annotation-driven conversion-service="applicationConversionService" />

Und:

<!-- Enables custom conversion, validation and sets a custom vew factory creator on Spring Webflow -->
<webflow:flow-builder-services id="flowBuilderServices" conversion-service="defaultConversionService" validator="validator" view-factory-creator="mvcViewFactoryCreator" />

Mit dieser Konfiguration funktioniert es bei mir einwandfrei. Ich hoffe, es hilft.

0 Stimmen

InstallFormatters scheint nicht mehr in FormattingConversionServiceFactoryBean zu existieren.

-1voto

cuh Punkte 3644

Ich denke, es muss so sein:

StringToDate std = new StringToDate();
std.setPattern("dd.MM.yyyy");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X