Vaadin:过滤表格上的输出

时间:2012-11-19 08:15:04

标签: java search filter vaadin

我是java组件基础框架中的新东西,尤其是vaadin。 在使用这个框架之前,我正在使用struts 2.

所以当我想查询一些表时,我有一个搜索框,包含很多文本字段。当用户点击搜索按钮时,texfield中的参数将直接使用http post发送到我的hibernate。

我的问题,如何使用vaadin过滤输出?

3 个答案:

答案 0 :(得分:3)

只需使用新数据更新BeanContainer即可。这是我的代码的一个例子

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

其中 CustomerFilter 是一个包含所有搜索条件数据的bean,我在之前的表单中填充它(例如使用组合框),beanContainer是我的表容器数据源。

答案 1 :(得分: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);

答案 2 :(得分:0)

这是我使用用户使用textfield输入的文本过滤行的解决方案:

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 +"%"));
                }

            }
        });

我希望代码是自我规划的。