我正在使用寫入版本8的新應用程序(當前使用8.1.0.rc2進行測試)。Grid SelectionMode.MULTI缺少標題複選框以選擇所有BackEndDataProvider
當使用SelectionMode.MULTI
時,圍繞出現在Grid
的標題中的「全選」複選框出現問題。特別是,如果DataProvider
執行InMemoryDataProvider
時複選框出現並按預期運行,但當DataProvider
執行BackEndDataProvider
時複選框不出現。
下面的代碼創建兩個網格差別只在於它們是否使用InMemory或後端:
public class Test {
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
private String name;
}
public class TestView extends BaseView {
public TestView() {
super("Test");
addComponent(new TestGrid(new TestDataProvider0()));
addComponent(new TestGrid(new TestDataProvider1()));
}
}
public class TestGrid extends Grid<Test> {
public TestGrid(DataProvider<Test, ?> dataProvider) {
setHeightByRows(4);
setSelectionMode(SelectionMode.MULTI);
setDataProvider(dataProvider);
addColumn(Test::getName).setCaption("Name");
}
}
public class TestDataProvider0 extends AbstractDataProvider<Test, SerializablePredicate<Test>> implements
BackEndDataProvider<Test, SerializablePredicate<Test>> {
public Stream<Test> fetch(Query<Test, SerializablePredicate<Test>> query) {
List<Test> tests = new ArrayList<>(query.getLimit());
for (int i = 0; i < query.getLimit(); i++) {
Test test = new Test();
test.setName(String.valueOf(query.getOffset() + i));
tests.add(test);
}
return tests.stream();
}
public int size(Query<Test, SerializablePredicate<Test>> query) {
return 100;
}
public void setSortOrders(List<QuerySortOrder> sortOrders) {
}
}
public class TestDataProvider1 extends AbstractDataProvider<Test, SerializablePredicate<Test>> implements
InMemoryDataProvider<Test> {
public Stream<Test> fetch(Query<Test, SerializablePredicate<Test>> query) {
List<Test> tests = new ArrayList<>(query.getLimit());
for (int i = 0; i < query.getLimit(); i++) {
Test test = new Test();
test.setName(String.valueOf(query.getOffset() + i));
tests.add(test);
}
return tests.stream();
}
public int size(Query<Test, SerializablePredicate<Test>> query) {
return 100;
}
public SerializablePredicate<Test> getFilter() {
return null;
}
public void setFilter(SerializablePredicate<Test> filter) {
}
public SerializableComparator<Test> getSortComparator() {
return null;
}
public void setSortComparator(SerializableComparator<Test> comparator) {
}
}
我錯過了在設定的一個關鍵步驟我的基於BackEnd的數據提供者/網格? related documentation似乎沒有解決這個問題。
是否有與此相關的已知問題?
是否全選無法通過設計?很明顯,這可能相互作用實在太差了對大數據集的延遲加載的概念...
我做了一個快速示例,沒有過濾器,沒有什麼奇特的,使用'DataProvider.ofCollection(p人),它的行爲正常。你能分享一個[sscce](http://sscce.org)來重現你的問題嗎? – Morfic
@Morfic我欣賞你看看,並指出這應該工作。我將開始從代碼中取出東西來查看問題出在哪裏。 – Rob
@Morfic問題已根據進一步調查改寫。它看起來像用於實現InMemoryDataProvider的DataProvider,但在實現BackEndDataProvider時不起作用。任何想法爲什麼? – Rob