Dorado 9 : Server端数据过滤和排序(sample-center)

DataGrid支持过滤栏功能,界面效果如下:

默认情况下过滤栏不显示,如果想要显示,很简单,直接设置Grid的showFilterBar属性为true就可以:

我们在过滤栏中输入值,敲回车就会执行过滤查询,默认情况下这个查询只针对当前已经加载到浏览器端的数据进行过滤处理,如果我们希望执行持久层层面的过滤查询,则需要将这些参数提交给持久层负责查询的相关DAO对象,数据传递技巧-首先要设置Grid的filterMode为serverSide(默认clientSide):

如果改为serverSide后,当我们在过滤栏中输入内容,并按回车键时就会直接触发对应的DataProvider的服务,那么在服务器端的DataProvider中如何获取相关的值并传递给持久层数据查询的DAO呢,我们看如下代码:

@DataProvider
public void getAll(Criteria criteria) throws Exception {
	if (criteria != null) {
		orderDao.find();
	} else {
		orderDao.find();
	}
}

如果采用过滤栏查询,则DataProvider的方法中我们可以定义一个Criteria对象(com.bstek.dorado.data.provider.Criteria),这是Provider提供的一个封装对象,用于描述Grid中过滤栏中的查询条件,由于Grid中通常都有多个列,如果在多个列中都输入值,则我们可以通过其Criteria对象的getCriterions()方法获取多个查询条件,不同的查询条件可以用getProperty()属性加以区分,如:

java.util.List<Criterion>	criterions = criteria.getCriterions();
for (Criterion criterion:criterions){
	String property = ((FilterCriterion)criterion).getProperty();//获取查询的属性名
	if ("productName".equals(property)){
	}
	if ("unitPrice".equals(property)){
	}
}

通过getValue方法获取用户输入的值:

Object value = ((SingleValueFilterCriterion)criterion).getValue();//获取过滤栏中的输入值

另外过滤栏中还支持一些过滤查询的规则符号,如>,<,>=,<=等:

对于这种保护特殊符号的输入值,如果我们还想知道对应的符号是什么可以通过如下代码得到:

FilterOperator filterOperator = ((SingleValueFilterCriterion)criterion).getFilterOperator();//获取过滤栏中的过滤符号

FilterOperator是一个ENUM类型的对象,目前的定义如下:

public enum FilterOperator {
	eq {
		public String toString() {
			return "=";
		}
	},
	ne {
		public String toString() {
			return "<>";
		}
	},
	gt {
		public String toString() {
			return ">";
		}
	},
	lt {
		public String toString() {
			return "<";
		}
	},
	le {
		public String toString() {
			return "<=";
		}
	},
	ge {
		public String toString() {
			return ">=";
		}
	},
	like,
	between,
	in
}