2017-06-14 85 views
1

一個目錄選擇我需要更新目錄選擇名單後,我在一個按鈕,按一下,但我不知道更新在Vaadin 7

這裏怎麼是我的代碼:

創建列表法

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,但我無法找到設置或更新目錄選擇

Vaadin的Javadoc的列表的方法:提前Vaadin Javadoc 7.7.9 ListSelect

感謝

+1

'listaConsultas'和'queryList'是同一件事嗎? 「obtenerNombresLista」和「getQueryList」也是同樣的問題。 –

+1

是的,對不起,我在翻譯時忘了更改這個名字,我編輯了我的答案白名正確的名字 – MaQuiNa1995

回答

2

直接的方法是從底層容器中移除所有物品,然後添加新物品:

Container container = queryList.getContainerDataSource(); 
container.removAllItems(); 
List<String> queries = getQueryList(); 
for(String query : queries) { 
    container.addItem(query); 
} 

ListSelect(String caption, Collection<?> options)構造函數創建一個IndexedContainer並使用您的集合中的項目填充它。

另一種選擇是將ListSelect綁定到可能使其能夠自動跟蹤更改的容器。有關詳細信息,請參閱Vaadin文檔中的"Collecting Items in Containers"主題。

+2

謝謝你,這個作品! – MaQuiNa1995