【问题标题】:How do I customize a Vaadin Grid which contains Jooq Records?如何自定义包含 Jooq 记录的 Vaadin 网格?
【发布时间】:2023-03-24 00:30:01
【问题描述】:

我需要从包含自动生成的 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 的容器不是 Grid() 构造函数的默认容器

使用 Vaadin Tables 就可以正常工作。但是看了this之后我喜欢用Grids

出现这种情况的原因我找到了here

如何用我找到的简单 Beans 编写容器 here

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

请给点建议


Java 1.7 - Vaadin 7.7.3

【问题讨论】:

    标签: java vaadin jooq


    【解决方案1】:

    改变

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

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

    【讨论】:

    猜你喜欢
    • 2018-09-12
    • 2015-11-07
    • 2018-01-09
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多