1

我知道Vaadin 8.1.0 将包含一个新的 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为 aLong而不是扩展,而是使用我自己的代码进行扩展,那么它可以工作AbstractRendererNumberRenderer

这将我带到需要Renderer使用 aAbstractRendererConnector设置的文档,但是每当我尝试这样做时,我都会收到编译器错误,提示AbstractRendererConnector无法解析为类型。然后当然我有一些编译器错误(在下面的代码中)。我的代码(仍在主 UI 类中)是:

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

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

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

4

1 回答 1

0

如果您的编译器无法解析AbstractRendererConnector<T>为类型,则您必须缺少依赖项。如果您使用的是 Maven,则可以添加以下依赖项,假设vaadin-bom您的<dependencyManagement>部分中有 。

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

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

还要注意:有两个Renderer接口,一个 incom.vaadin.client.renderers和一个 in com.vaadin.ui.renderers。您的协变返回LocalDateRendererConnector.getRenderer()不起作用,因为AbstractRendererConnector<T>实现了不同的Renderer接口。

于 2017-03-30T02:49:01.843 回答