我理解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
时是哪个类,因为它们使用相同的名称来表示不同的内容......
答案 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.renderers
。 LocalDateRendererConnector.getRenderer()
中的协变回复将无效,因为AbstractRendererConnector<T>
实现了不同的Renderer
接口。