【问题标题】:How to render LocalDateRenderer for Grid in Vaadin 8如何在 Vaadin 8 中为 Grid 渲染 LocalDateRenderer
【发布时间】:2017-08-22 02:16:35
【问题描述】:

我知道 Vaadin 8.1.0 will include a new LocalDateRenderer 可以使用 Java 8 的新日期 LocalDate,但同时我正在尝试设置我自己的自定义 LocalDateRenderer。我的工作主要是因为它已经全部连接起来,但根据文档我需要设置一个 AbstractRendererConnector 但没有这样的类...

以下代码都在我的主 UI 类中(用于测试目的):

private void setupGrid(Grid<Dog> grid)
{
    grid.addColumn(dog -> dog.getBirthday(), new LocalDateRenderer()).setCaption("Birthday");
}

class LocalDateRenderer extends AbstractRenderer<Object, LocalDate>
{
    public LocalDateRenderer() 
    {
        super(LocalDate.class, "");
    }

    @Override
    public JsonValue encode(LocalDate localDate) 
    {
        return encode(DateTimeFormatter.ofPattern("MMM dd, YYYY").format(localDate), String.class);
    }
}

我已经确认LocalDateRenderer 是通过添加日志语句调用的,但是在网格上没有显示任何值。如果我使用相同的代码,但不是 LocalDate,而是为 Long 而不是扩展 AbstractRenderer,我使用自己的代码扩展 NumberRenderer,那么它可以工作。

这将我带到documentation where I need to setup the Renderer with a AbstractRendererConnector,但每当我尝试这样做时,我都会收到编译器错误,指出AbstractRendererConnector 无法解析为类型。然后当然我有一些编译器错误(在下面的代码中)。我的代码(仍在主 UI 类中)是:

@Connect(LocalDateRenderer.class)
class LocalDateRendererConnector extends AbstractRendererConnector<LocalDate> 
{
    @Override
    public LocalDateRenderer getRenderer() 
    {
        return (LocalDateRenderer) super.getRenderer();
    }
}

任何有关如何将其链接起来以显示我的实际日期的帮助将不胜感激。谢谢。

在文档中也不清楚当他们引用TextRenderer 时哪个类是哪个类,因为它们使用相同的名称来表示不同的东西......

【问题讨论】:

  • 仅供参考,Vaadin 框架 8.1.0 Alpha 2 is available。你可以看看他们的源代码。
  • 我尝试构建类似的渲染器,但几个小时后放弃了,决定等待 8.1。我不着急,等8.1吧。正式出局,并将我的日期显示为字符串(野蛮,我知道..)同时..
  • 只是一个指向问题的链接,其中包含主题github.com/vaadin/framework/issues/8377#issuecomment-290049482的讨论
  • 如果您只想以某种特定格式显示它们,您可以使用converters 在 8.1.0 之前使用临时解决方法。如果您出于其他原因想做渲染器,请忽略我的评论
  • 我查看了代码,几个小时后我放弃了。我找不到丢失的链接...

标签: java vaadin vaadin-grid localdate vaadin8


【解决方案1】:

如果您的编译器无法将 AbstractRendererConnector&lt;T&gt; 解析为类型,则您一定缺少依赖项。如果您使用的是 Maven,则可以添加以下依赖项,假设您的 &lt;dependencyManagement&gt; 部分中有 vaadin-bom

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-client</artifactId>
    </dependency>

默认情况下,大多数 Vaadin 原型都不包含此工件。

还要注意:Renderer 接口有两个,一个在com.vaadin.client.renderers,一个在com.vaadin.ui.renderersLocalDateRendererConnector.getRenderer() 中的协变返回将不起作用,因为 AbstractRendererConnector&lt;T&gt; 实现了不同的 Renderer 接口。

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多