5

有人有这个问题吗:

我需要配置spring来识别基于语言环境的日期和数字格式,即以下用户行为应该是有效的:

  1. 用户选择语言为EN,那么数字格式1.23应该是有效的,spring mvc 将接受这种格式并且不会触发有效错误。用户还可以使用日期格式更改日期MM/dd/yyyy并且没有引发有效错误,用户可以发布此表格。
  2. 用户选择语言为DE,那么数字格式1,23应该是有效的,spring mvc 将接受这种格式并且不会触发有效错误。用户还可以使用日期格式更改日期,dd.MM.yyyy并且不会触发有效错误。用户可以发布此表格。

我尝试使用@DateTimeFormat(pattern="#{messageSource['date_format']}"),(我在 messages_(locale).properties 中定义了 date_format)但似乎 spring 还不支持这个,请参阅JIRA ISSUE

有人有类似的问题并得到了解决方案。

编写我自己的转换器并注册它有帮助org.springframework.format.support.FormattingConversionServiceFactoryBean吗?我需要某种基于请求的转换器

4

1 回答 1

8

由于没有人回答我的问题,我只是发布我的一个解决方案来解决这个问题,它可以帮助其他人:

  1. 我有一个请求范围的 bean,它使用以下方法解析语言环境:RequestContextUtils.getLocale(request);请求可以自动连接到请求范围的类(注意,它仅适用于字段注入,不适用于构造或设置器)。在这堂课中,我得到了基于语言环境的日期/数字格式。
  2. 在我的控制器中(我们实际上有一个 abstractController)。我有这样的代码:

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Date.class, new LocalizedDateEditor(formatHelper));
    }
    

formatHelper是请求范围的 bean。LocalizedDateEditor看起来像这样:

public class LocalizedDateEditor extends CustomDateEditor {

    public LocalizedDateEditor(FormatHelper formatHelper) {
        super(new SimpleDateFormat(formatHelper.getDefaultDateFormat()), true);
    }
}

它只是告诉 spring 使用我的 dateFormat。

就这样。

于 2013-10-07T11:55:12.993 回答