在 Vaadin 7 中更新 ListSelect
Update a ListSelect in Vaadin 7
我需要在单击一个按钮后更新 ListSelect 的列表,但我不知道如何
这是我的代码:
创建列表方法
private void createListPanel() {
VerticalLayout listPanel = new VerticalLayout();
listPanel.setWidth(100f, Unit.PERCENTAGE);
queryList= new ListSelect("List Of Querys", getQueryList());
queryList.setWidth(100f, Unit.PERCENTAGE);
queryList.setNullSelectionAllowed(false);
queryList.addValueChangeListener(event -> {
selectedQuery = (String) (queryList.getValue());
String retrievedQuery = repository.getRawQuery(selectedQuery);
});
listPanel.addComponent(queryList);
panelSuperior.addComponent(listPanel);
}
getQueryList()
private List<String> getQueryList() {
return repository.getQueryNames();
}
创建按钮方法
private void CreateButton() {
Button buttonRefresh= new Button("Refresh");
buttonRefresh.addClickListener((Button.ClickEvent e) -> {
// i tried this
queryList.setContainerDataSource((Container) getQueryList());
});
buttonPanel.addComponent(button);
}
我在 CreateButton() 方法中尝试了这一行:
queryList.setContainerDataSource((Container) getQueryList())
但我得到一个
java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.vaadin.data.Container
因为这个方法需要一个容器对象
我在 Vaadin javadoc 中搜索,但找不到设置或更新 ListSelect 列表的方法
Vaadin Javadoc: Vaadin Javadoc 7.7.9 ListSelect
提前致谢
直接的方法是从底层容器中删除所有项目,然后添加新项目:
Container container = queryList.getContainerDataSource();
container.removAllItems();
List<String> queries = getQueryList();
for(String query : queries) {
container.addItem(query);
}
ListSelect(String caption, Collection<?> options)
constructor creates an IndexedContainer
并用您的 collection.
中的项目填充它
另一种选择是将 ListSelect
绑定到一个容器,这可能使它能够自动跟踪更改。有关详细信息,请参阅 Vaadin 文档中的 "Collecting Items in Containers" 主题。
我需要在单击一个按钮后更新 ListSelect 的列表,但我不知道如何
这是我的代码:
创建列表方法
private void createListPanel() {
VerticalLayout listPanel = new VerticalLayout();
listPanel.setWidth(100f, Unit.PERCENTAGE);
queryList= new ListSelect("List Of Querys", getQueryList());
queryList.setWidth(100f, Unit.PERCENTAGE);
queryList.setNullSelectionAllowed(false);
queryList.addValueChangeListener(event -> {
selectedQuery = (String) (queryList.getValue());
String retrievedQuery = repository.getRawQuery(selectedQuery);
});
listPanel.addComponent(queryList);
panelSuperior.addComponent(listPanel);
}
getQueryList()
private List<String> getQueryList() {
return repository.getQueryNames();
}
创建按钮方法
private void CreateButton() {
Button buttonRefresh= new Button("Refresh");
buttonRefresh.addClickListener((Button.ClickEvent e) -> {
// i tried this
queryList.setContainerDataSource((Container) getQueryList());
});
buttonPanel.addComponent(button);
}
我在 CreateButton() 方法中尝试了这一行:
queryList.setContainerDataSource((Container) getQueryList())
但我得到一个
java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.vaadin.data.Container
因为这个方法需要一个容器对象
我在 Vaadin javadoc 中搜索,但找不到设置或更新 ListSelect 列表的方法
Vaadin Javadoc: Vaadin Javadoc 7.7.9 ListSelect
提前致谢
直接的方法是从底层容器中删除所有项目,然后添加新项目:
Container container = queryList.getContainerDataSource();
container.removAllItems();
List<String> queries = getQueryList();
for(String query : queries) {
container.addItem(query);
}
ListSelect(String caption, Collection<?> options)
constructor creates an IndexedContainer
并用您的 collection.
另一种选择是将 ListSelect
绑定到一个容器,这可能使它能够自动跟踪更改。有关详细信息,请参阅 Vaadin 文档中的 "Collecting Items in Containers" 主题。