2012-11-19 33 views
3

im在java組件基礎框架中的新特性,特別是vaadin。 使用此框架之前,即時通訊使用struts 2.Vaadin:在表格上過濾輸出

所以當我想查詢一些表,我有一個搜索框,包含許多文本框。當用戶點擊搜索按鈕時,那麼來自texfield的參數將直接使用http post發送到我的休眠中。

我的問題,如何使用vaadin過濾輸出?

回答

3

只需用新數據更新您的BeanContainer即可。下面是我的代碼示例

public void refreshTableData() { 
    getBeanContainer().removeAllItems(); 
    List<Customer> customers = customerDao.getByCustomerFilter(getCustomerFilterForm().getFilterItem().getBean()); 
    getBeanContainer().addAll(customers); 
} 

CustomerFilter是具有所有的搜索標準的數據,我往裏面內的形式較早(例如用組合框)一個bean,並beanContainer是我的表容器數據資源。

+0

感謝您的回答J-unior。所以我必須先創建容器? –

+2

很高興幫助,我建議你應該閱讀[this](https://vaadin.com/tutorial/-/chapter/databinding.binding.html) –

+0

嗨J-unior,再次感謝您的幫助。它的作品..:D –

0
filterString = checkBox.getValue().toString(); 
Filterable f = (Filterable)(table.getContainerDataSource()); 
     if(filters==null) 
      filters=new TreeMap<Object, SimpleStringFilter>(); 
     SimpleStringFilter filter=filters.remove(propertyId); 
      if (filter != null){ 
       f.removeContainerFilter(filter); 
      } 
      filter = new SimpleStringFilter(propertyId, filterString, ignoreCase, onlyMatchPrefix); 
     filters.put(propertyId, filter); 
     f.addContainerFilter(filter); 
+0

你應該解釋你的代碼是爲了提問者的利益而做的。 –

0

這是我的解決方案,以過濾行使用文本框使用用戶輸入文本:

textField.addTextChangeListener(new TextChangeListener() { 

      @Override 
      public void textChange(TextChangeEvent event) { 
       Filterable filter= (Filterable) (table.getContainerDataSource()); 
       filter.removeAllContainerFilters(); 

       String filterString = event.getText(); 
       if (filterString.length() > 0) { 
        filter.addContainerFilter(new Like("columnName", "%"+filterString +"%")); 
       } 

      } 
     }); 

我希望代碼selfexplanatory。