我知道Vaadin 8.1.0 will include a new LocalDateRenderer需要与Java8的新date 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时,并不清楚哪个类是哪个类,因为它们使用相同的名称表示不同的事物……
发布于 2017-03-30 10:49:02
如果您的编译器不能将AbstractRendererConnector<T>解析为一个类型,那么您一定缺少一个依赖项。如果您使用的是Maven,那么您可以添加以下依赖项,假设您的<dependencyManagement>部分中有vaadin-bom。
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-client</artifactId>
</dependency>默认情况下,这个工件不包含在大多数Vaadin原型中。
还要小心:有两个Renderer接口,一个在com.vaadin.client.renderers中,另一个在com.vaadin.ui.renderers中。因为AbstractRendererConnector<T>实现了不同的Renderer接口,所以LocalDateRendererConnector.getRenderer()中的协变返回将不起作用。
https://stackoverflow.com/questions/43079174
复制相似问题