【问题标题】:How to change default format in StringToDate? Spring WebFlow如何更改 StringToDate 中的默认格式?春季网络流
【发布时间】:2011-03-19 10:21:33
【问题描述】:

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

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

【问题讨论】:

    标签: java spring-webflow


    【解决方案1】:

    我觉得应该是这样的:

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

    【讨论】:

      【解决方案2】:

      对于迟到的帖子感到抱歉,但这是您必须做的。 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 中添加什么?谢谢
      • @lethal.industry 您需要创建MyConversionService 并将您的MyDateToString 添加到该转换服务中。因此,您需要同时创建两者。 MyDateString 没有实现 ConversionService
      • 嗯抱歉,但对我来说还不清楚。你能给我一个例子吗?我需要为@OneToMany Set 转换器 创建一个字符串
      • 哦。因此,您将 String 转换为一组对象。如果你真的想要一个例子,你应该提出一个新问题,因为我不希望这个(4年前写的)被更新。但是您的 StringToObject 方法应该返回MyEntity 的类型。如果正确传递了集合,Spring MVC 和 webflow 会为您处理集合(哪些 Web 表单会为您处理)。您需要做的是让您的 toObject 方法返回集合。
      • 如果您确实提出其他问题,请随时在此处链接。
      【解决方案3】:

      我通过创建这个 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" />
      

      有了这个配置,它对我来说很好用。希望对你有帮助。

      【讨论】:

      • installFormatters 似乎不再存在于 FormattingConversionServiceFactoryBean 中。
      猜你喜欢
      • 2010-12-23
      • 2010-12-15
      • 2011-02-21
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      相关资源
      最近更新 更多