如何在Vaadin 8

时间:2017-03-28 20:19:22

标签: java vaadin vaadin-grid localdate vaadin8

我理解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时是哪个类,因为它们使用相同的名称来表示不同的内容......

1 个答案:

答案 0 :(得分:0)

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

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

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

另外要注意:有两个Renderer接口,一个在com.vaadin.client.renderers,一个在com.vaadin.ui.renderersLocalDateRendererConnector.getRenderer()中的协变回复将无效,因为AbstractRendererConnector<T>实现了不同的Renderer接口。