私はJavaコンポーネントベースフレームワーク、特にvaadinの新機能です。このフレームワークを使用する前に、struts 2 を使用しています。
そのため、いくつかのテーブルをクエリしたい場合、検索ボックスがあり、多くのテキストフィールドが含まれています。ユーザーが [検索] ボタンをクリックすると、texfield のパラメーターが http ポストを使用して休止状態に直接送信されます。
私の質問、vaadin を使用して出力をフィルタリングする方法は?
BeanContainer を新しいデータで更新するだけです。これが私のコードの例です
public void refreshTableData() {
getBeanContainer().removeAllItems();
List<Customer> customers = customerDao.getByCustomerFilter(getCustomerFilterForm().getFilterItem().getBean());
getBeanContainer().addAll(customers);
}
ここで、 CustomerFilterはすべての検索基準データを含む Bean であり、以前にフォーム内に (コンボボックスなどで) 入力し、beanContainer はテーブル コンテナー データ ソースです。
これは、テキストフィールドを使用してユーザーが入力したテキストを使用して行をフィルタリングする私のソリューションです:
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 +"%"));
}
}
});
コードが自明であることを願っています。
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);