如何在StringToDate中更改默认格式?Spring WebFlow

6

Spring WebFlow的默认日期格式为“yyyy-MM-dd”。

如何更改为另一种格式?例如,“dd.mm.yyyy”。

3个回答

4
抱歉,发布有些晚了,以下是您需要做的事情。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
        }       
    }
}

我正在尝试为多对多关系做一个转换服务。看了你的答案,我需要添加“MyConversionService”和“MyDateToString”两个类吗?还是“MyDateToString”是“MyConversionService”的特定实现?那么,在“MyConversionService”中我需要放什么?谢谢。 - SaganTheBest
@lethal.industry 您需要创建 MyConversionService 并将您的 MyDateToString 添加到该转换服务中。因此,您需要同时创建这两个内容。MyDateString 不实现 ConversionService。 - John Vint
抱歉,对我来说不太清楚。你能否提供一个例子给我?我需要创建一个字符串到@OneToMany Set<MyEntity>转换器。 - SaganTheBest
哦,所以你要将一个字符串转换为一组对象。如果你真的想要一个例子,你应该开一个新问题,因为我不想更新这个(写于4年前)的问题。但是你的StringToObject方法应该返回一个类型为MyEntity的对象。如果传递正确(Web表单会处理),Spring MVC和Webflow会为你处理集合。你需要做的就是让你的toObject方法返回这个集合。 - John Vint
如果您有任何其他问题,请随时在此处提供链接。 - John Vint
非常感谢@JohnVint。我几天前发布了这个问题:http://stackoverflow.com/questions/24608519/string-to-type-onetomany-converter-spring-hibernate。对我来说,看到这是一件非常简单的事情,这让我感到非常惊讶,因为我已经卡在这里很多天了。谢谢。 - SaganTheBest

2

我通过创建这个bean实现了这个目标:

@Component(value = "applicationConversionService") public class 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:

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

我使用这个配置,对我来说效果很好。希望能帮到你。


installFormatters 似乎不再存在于 FormattingConversionServiceFactoryBean 中。 - Luke

-1
我认为应该是这样的:
StringToDate std = new StringToDate();
std.setPattern("dd.MM.yyyy");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接