【问题标题】:Change Locale at LocalDateTimeRenderer in Vaadin 14在 Vaadin 14 中的 LocalDateTimeRenderer 更改区域设置
【发布时间】:2022-01-05 01:01:28
【问题描述】:

我想更改 LocaleChangeObserver 中 Vaadin 14 Grid 列中 LocalDateTime 值的格式。

工作是这样的:

  1. 复制类com.vaadin.flow.data.renderer.LocalDateTimeRenderer<SOURCE>

  2. 像这样实现我自己的方法setLocale

     public void setLocale(Locale newLocale) {
         formatter = formatter.withLocale(newLocale);
     }
    
  3. 像这样从LocaleChangeObserver.localeChange 实现调用setLocale

     public void localeChange(LocaleChangeEvent event) {
         myLocalDateTimeRenderer.setLocale(event.getLocale());
     }
    

这是可行的,但我不想复制 Vaadin 类。是否有更优雅甚至“预期”的方式来实现这一目标?

我也尝试过(什么不起作用)是这样的:将 DateTimeFormatter 放入原始 Vaadin com.vaadin.flow.data.renderer.LocalDateTimeRenderer 实例,然后从 localeChange 方法调用 dateTimeFormatter.withLocale。这不起作用,因为withLocale 方法返回DateTimeFormatter 的新实例,而不是调整现有实例。并且创建我自己的 DateTimeFormatter 扩展将不起作用,因为该类是最终的。

【问题讨论】:

    标签: vaadin vaadin-flow vaadin-grid vaadin14


    【解决方案1】:

    看看这里:Vaadin 21: change date format at LocalDateTimeRenderer in Grid on locale change

    此方法使用TextRenderer。我猜它可以在 Vaadin 14 中使用。

    【讨论】:

      【解决方案2】:

      这是可行的,但我不想复制 Vaadin 类。是否有更优雅甚至“预期”的方式来实现这一目标?

      这个用例(只是即时更改渲染器的语言环境,没有其他)似乎在这里不受支持。我在https://github.com/vaadin/flow/issues 中没有找到它的功能请求,但你可以在那里添加它。我认为原因是在大多数情况下,在更改区域设置后,需要重新创建网格(以及视图中的其他组件),因为还需要更改许多其他内容(标题、各种文本等等)。 。) IE放弃旧的 Grid 并创建一个新实例,使用新的 Locale 重新创建列等是最常见的场景。

      但是,您不需要复制该类。你可以这样做

      public class MyLocalDateTimeRenderer<SOURCE>
              extends BasicRenderer<SOURCE, LocalDateTime>
      

      与您已经完成的实现相同。

      Grid 中有重载,即Grid#addColumn(Renderer),您可以在其中设置自己的自定义渲染器。

      【讨论】:

      • 功能请求见这里:github.com/vaadin/flow/issues/12462。你是对的:需要更新许多其他组件。我已经实现了。这并不困难,但“只是”耗时,因为没有常见的公开(!)可见抽象,例如EmailField.setLabel 和 TextField.setLabel。最棘手的部分是将输入字段中的英文格式数字(例如“50,000.12”)转换为德文格式的数字(例如“50.000,12”),然后使用不同的千位/小数分隔符返回,而不会丢失转换器中的任何数字-实现。
      • 是的,你是对的:我不必创建具有相同包和/或相同名称的精确副本,实际上我没有。但功能内容几乎一样,所以我称之为“复制”。
      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多