我需要从包含自动生成的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 ...
}
}));