Как изменить формат по умолчанию в StringToDate? Spring WebFlow - PullRequest
6 голосов
/ 22 июля 2010

Формат даты по умолчанию в Spring WebFlow - "гггг-ММ-дд".

Как поменять на другой формат? "дд.мм.гггг", например.

Ответы [ 3 ]

4 голосов
/ 27 июля 2010

Извините за поздний пост, но вот что вы должны сделать. Spring Webflow выполняет пользовательскую привязку данных. Это похоже на то, как Spring MVC делает это. Разница, однако, в том, где он это обрабатывает. Spring MVC обрабатывает это на уровне контроллера (используя @InitBinder).

Spring webflow делает это на уровне привязки. Перед выполнением веб-потока перехода связывает все значения параметров с объектом, затем проверяет форму (если validate = "true"), а затем вызывает переход при успешной проверке.

То, что вам нужно сделать, - это заставить веб-поток изменить средства привязки даты. Вы можете сделать это, написав собственный конвертер.

Сначала вам понадобится услуга конвертации:

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

    public void MyConversionService() {

    }
}

Webflow будет использовать этот сервис для определения того, какую специальную привязку необходимо учитывать. Теперь просто напишите свой конкретный механизм связывания даты (имейте в виду, что по умолчанию для веб-потока используется механизм связывания даты, который вы просто переопределите).

@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
        }       
    }
}
2 голосов
/ 17 августа 2012

Я добился этого путем создания этого компонента:

@ Component (value = "applicationConversionService") открытый класс ApplicationConversionServiceFactoryBean extends FormattingConversionServiceFactoryBean {

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

Зарегистрированный компоненткак это:

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

Затем ссылаются:

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

И:

<!-- 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" />

С этой конфигурацией у меня все работает нормально.Надеюсь, это поможет.

0 голосов
/ 23 июля 2010

Я думаю, что это должно быть так:

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