我正在做一个 Vaadin (7.10) 应用程序,在某些 View 中,我需要在容器中添加一个“特殊”嵌套属性。为了应用程序的目的,我们使用 BeanItemContainer 和 Grid。我有一些类存储另一个 POJO 的 List
,并且我需要使用第二个 POJO 中的一个属性来过滤网格。配置的基本示例是:
public class A {
private String property1;
private String property2;
//There are too getters and setters for this two properties
}
public class B { //This class stores a list of As
private String name;
private List<A> list;
//Getters and setters too
}
这是我的两个基本类,我用它们来存储数据。显示数据的 Vaadin 代码为:
Grid grid = new Grid();
BeanItemContainer<B> container = new BeanItemContainer<>(B.class);
//////////////
container.addNestedContainerProperty("list.property1");
//This OBVIOUSLY doesn't work, because property1 is not part of List
/////////////
grid.setColumns("name");
grid.setContainerDataSource(container);
所以,我的问题是:
可以在 Grid
中显示此 property1
无需从 BeanItemContainer
进行更改?
最佳答案
这似乎是生成属性的工作。
但是:它仍然需要从 BeanItemContainer
进行更改,或者更详细地说,它需要包装它。无论如何,当我(几年前)这样做时,这不是问题。
为此,您需要GenelatedPropertyContainer
。它是需要添加生成属性的其他容器的包装器。
GeneratedPropertyContainer container =
new GeneratedPropertyContainer(yourBeanItemContainer);
将生成的属性添加到该容器
container.addGeneratedProperty("property1"
,new PropertyValueGenerator<String>() { ... });
上面提到的 PropertyValueGenerator
应该返回您可能从某些 pojo A
中选择的 String
。
Vaadin API for PropertyValueGenerator
更新考虑过滤:PropertyValueGenerator
覆盖方法
modifyFilter(Container.Filter filter)
Return an updated filter that should be compatible with the underlying container.
例如:如果您只是从列表中选择第一个 pojo A
及其 property1
,您可以实现此功能以使过滤器过滤掉所有 B
a 的第一个 A
s property1
不匹配。
关于java - 如何将具有过滤功能的嵌套复杂属性添加到 Vaadin 7 Grid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46975312/