im在java組件基礎框架中的新特性,特別是vaadin。 使用此框架之前,即時通訊使用struts 2.Vaadin:在表格上過濾輸出
所以當我想查詢一些表,我有一個搜索框,包含許多文本框。當用戶點擊搜索按鈕時,那麼來自texfield的參數將直接使用http post發送到我的休眠中。
我的問題,如何使用vaadin過濾輸出?
im在java組件基礎框架中的新特性,特別是vaadin。 使用此框架之前,即時通訊使用struts 2.Vaadin:在表格上過濾輸出
所以當我想查詢一些表,我有一個搜索框,包含許多文本框。當用戶點擊搜索按鈕時,那麼來自texfield的參數將直接使用http post發送到我的休眠中。
我的問題,如何使用vaadin過濾輸出?
只需用新數據更新您的BeanContainer即可。下面是我的代碼示例
public void refreshTableData() {
getBeanContainer().removeAllItems();
List<Customer> customers = customerDao.getByCustomerFilter(getCustomerFilterForm().getFilterItem().getBean());
getBeanContainer().addAll(customers);
}
凡CustomerFilter是具有所有的搜索標準的數據,我往裏面內的形式較早(例如用組合框)一個bean,並beanContainer是我的表容器數據資源。
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);
你應該解釋你的代碼是爲了提問者的利益而做的。 –
這是我的解決方案,以過濾行使用文本框使用用戶輸入文本:
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。
感謝您的回答J-unior。所以我必須先創建容器? –
很高興幫助,我建議你應該閱讀[this](https://vaadin.com/tutorial/-/chapter/databinding.binding.html) –
嗨J-unior,再次感謝您的幫助。它的作品..:D –