我需要添加/删除/自定义包含自动生成的jooq记录的Vaadin Grid中的列。
BeanItemContainer<MyJooqRecord> beanItemContainer;
beanItemContainer = DBUtil.getAll();
Grid grid = new Grid();
grid.setContainerDataSource(beanItemContainer);
现在我喜欢(例如)添加一个Button。
grid.addColumn("Action", Button.class).setRenderer(
new ButtonRenderer(new RendererClickListener() {
@Override
public void click(RendererClickEvent event) {
//code ...
}
}
));
结果:
2016-11-30 10:39:17,950 [http-nio-8080-exec-2] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] [DirectJDKLog.java:181] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [com.vaadin.server.ServiceException: java.lang.IllegalStateException: Container for this Grid is not a default container from Grid() constructor] with root cause
java.lang.IllegalStateException:此Grid的容器不是Grid()构造函数的默认容器
使用Vaadin表它可以正常工作。但在阅读this后,我喜欢使用网格
发生这种情况的原因我发现here
如何使用简单的Bean编写容器,我发现here
如何使用jooq记录实现这一目标?
请提出任何建议
Java 1.7 - Vaadin 7.7.3
答案 0 :(得分:0)
变化
到
grid.setContainerDataSource(beanItemContainer);
到//grid.setContainerDataSource(beanItemContainer);
GeneratedPropertyContainer wrapperContainer = new GeneratedPropertyContainer(beanItemContainer);
grid.setContainerDataSource(wrapperContainer);
列
REMOVE
到wrapperContainer.removeContainerProperty("createdDate");
列
ADD
到wrapperContainer.addGeneratedProperty("Col. Name", new PropertyValueGenerator<String>() {
@Override
public String getValue(Item item, Object itemId, Object propertyId) {
return "Button Caption";
}
@Override
public Class<String> getType() {
return String.class;
}
});
列(添加渲染器),如此
CUSTOMIZE