我是 Java 组件基础框架的新手,尤其是 vaadin。在使用这个框架之前,我使用的是 struts 2。
所以当我想查询一些表时,我有一个搜索框,包含许多文本字段。当用户单击搜索按钮时,来自 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 +"%"));
}
}
});
我希望代码是不言自明的。