我如何自定义包含JOOQ记录的Vaadin网格



我需要从包含自动生成的JOOQ记录的vaadin网格中添加/删除/自定义列。

BeanItemContainer<MyJooqRecord> beanItemContainer;
beanItemContainer = DBUtil.getAll();
Grid grid = new Grid();
grid.setContainerDataSource(beanItemContainer);

现在我喜欢(例如)添加一个按钮。

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()constructor

的默认容器

使用vaadin表,它的工作正常。但是阅读本文后,我喜欢使用网格

发生这种情况的原因,我在这里找到了

如何用我在此处找到的简单豆写一个容器

如何使用JOOQ记录来实现这一目标?

任何建议请


Java 1.7 -Vaadin 7.7.3

更改

grid.setContainerDataSource(beanItemContainer);

to

//grid.setContainerDataSource(beanItemContainer);
GeneratedPropertyContainer wrapperContainer = new GeneratedPropertyContainer(beanItemContainer);
grid.setContainerDataSource(wrapperContainer);

REMOVE A列

wrapperContainer.removeContainerProperty("createdDate");

ADD A列

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 a列(添加渲染器)像这样

grid.getColumn("Col. Name").setRenderer(new ButtonRenderer(new RendererClickListener() {
        @Override
        public void click(RendererClickEvent event) {
            MyJooqRecord record = (MyJooqRecord) event.getItemId();
            //code ...
        }
}));

最新更新