Spring WebFlow 中的默认日期格式是“yyyy-MM-dd”。
如何更改为另一种格式?例如“dd.mm.yyyy”。
对不起,迟到的帖子,但这是你必须做的。Spring Webflow 进行自定义数据绑定。它类似于 Spring MVC 的做法。不同之处在于它处理它的位置。Spring MVC 在控制器级别处理它(使用 @InitBinder )。
Spring webflow 在绑定级别上执行此操作。在执行转换之前,webflow 会将所有参数值绑定到对象,然后验证表单(如果 validate="true"),然后在成功验证时调用转换。
您需要做的是让 webflow 更改它绑定日期的方式。您可以通过编写自定义转换器来做到这一点。
首先,您需要一个转换服务:
@Component("myConversionService")
public class MyConversionService extends DefaultConversionService {
public void MyConversionService() {
}
}
Webflow 将使用此服务来确定需要考虑哪些特殊绑定。现在只需编写您的特定日期活页夹(请记住,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
}
}
}
我通过创建这个 bean 实现了这一点:
@Component(value = "applicationConversionService") 公共类 ApplicationConversionServiceFactoryBean 扩展 FormattingConversionServiceFactoryBean {
@Override protected void installFormatters(FormatterRegistry registry) { // Register the default date formatter provided by Spring registry.addFormatter(new DateFormatter("dd/MM/yyyy")); } }
像这样注册bean:
<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" />
使用此配置,它对我来说很好。我希望它有所帮助。
我想应该是这样的:
StringToDate std = new StringToDate();
std.setPattern("dd.MM.yyyy");