当前位置: 首页 > 知识库问答 >
问题:

如何自定义包含Jooq记录的Vaadin网格?

谷泽宇
2023-03-14

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

使用Vaadin表,效果很好。但读完这篇文章后,我喜欢使用网格

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

如何使用我在这里找到的简单bean编写容器

我如何才能实现与jooq记录?

有什么建议请

Java1.7-Vaadin7.7.3

共有1个答案

廖弘量
2023-03-14

改变

grid.setContainerDataSource(beanItemContainer);

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

删除列的步骤

wrapperContainer.removeContainerProperty("createdDate");

添加列

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;

        }
});

自定义如下列(添加渲染器),请执行以下操作

grid.getColumn("Col. Name").setRenderer(new ButtonRenderer(new RendererClickListener() {
        @Override
        public void click(RendererClickEvent event) {

            MyJooqRecord record = (MyJooqRecord) event.getItemId();
            //code ...
        }
}));
 类似资料:
  • 类似于这个问题:如何在Jooq中初始化和创建ResultSet和记录?但使用自定义行类型记录而不是简单的表记录。我正在实例化一个jooq记录以用于模拟,但该记录有超过22列并包含来自许多连接表的行,所以我使用RecordImpl。 这引发异常 java.lang.IllegalArgumentException:行()中不包含字段(“course\u id”) 注意,我没有直接使用RecordIm

  • 我正在用Visual Studio(2017)构建pybind11项目。安装文件如下: 然后在windows power shell中,我将运行 python设置。皮包 但是它抱怨找不到多个包含文件,我相信它以后也会抱怨缺少库文件: 我知道这个目标在哪里。h是,只是不知道如何将其位置添加到包含路径。 非常感谢你的帮助。

  • 现在我如何(以及在哪里)定义这些规则,以便SCSS编译器自动接受更改?否则,每次编译主题时,我所做的更改都会丢失。 问候

  • 我有这样的记录: 它获取default和方法。 如何调整这些方法使其具有自定义行为?假设,我想忽略方法中的。

  • 我想自定义滑块显示的数据。例如,与其显示一个数字,不如说是“前缀”数字“后缀”,而且这个值应该始终可见。 在类VSlider我找到了方法。我怀疑这是配置滑块显示的值的地方。我尝试用相同的包结构在我自己的项目中复制这个类,我还重新编译了小部件集,但是视图中没有显示这些更改。我刚开始为Vaadin创建客户端代码,所以可能有一些我不理解的地方。 问题: 你对我如何实现我的目标有什么建议吗? 您知道为什么

  • 在Spring Security中使用自定义JSP登录页面相当容易。不过,我们的应用程序是基于Vaadin的,我不想使用JSP登录页面。我想要的是作为Vaadin小部件创建的自定义高级登录窗口。 从技术上讲,我可以使用Vaadin的FormLayout和名称字段,比如j_用户名和j_密码……但这是Java类,而不是JSP文件,那么我在http Spring Security元素中指定了什么?我的意