如何自定义包含Jooq Records的Vaadin Grid?

时间:2016-11-30 10:21:40

标签: java vaadin jooq

我需要添加/删除/自定义包含自动生成的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

1 个答案:

答案 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