步骤1:我们在EmployeeService类中增加新方法getAllForFilter,增加后全部代码如下:
package com.bstek.dorado.sample.standardlesson.service;
import java.util.Collection;
import javax.annotation.Resource;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.stereotype.Component;
import com.bstek.dorado.annotation.DataProvider;
import com.bstek.dorado.data.provider.Criteria;
import com.bstek.dorado.data.provider.Page;
import com.bstek.dorado.hibernate.HibernateUtils;
import com.bstek.dorado.sample.standardlesson.dao.SlEmployeeDao;
import com.bstek.dorado.sample.standardlesson.entity.SlEmployee;
@Component
public class EmployeeService {
@Resource
private SlEmployeeDao slEmployeeDao;
@DataProvider
public Collection<SlEmployee> getAll(){
return slEmployeeDao.getAll();
}
@DataProvider
public void getAllForPage(Page<SlEmployee> page){
slEmployeeDao.getAll(page);
}
@DataProvider
public void getAllForFilter(Page<SlEmployee> page, Criteria criteria) throws Exception{
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(SlEmployee.class);
if (criteria != null){
slEmployeeDao.find(page, HibernateUtils.createFilter(detachedCriteria, criteria));
}else{
slEmployeeDao.getAll(page);
}
}
}
我们发现getAllForFilter方法中新传入了criteria参数,Criteria对象 (com.bstek.dorado.data.provider.Criteria),这是Provider提供的一个封装对象,用于描述Grid中过滤栏中的查询条件。通过传入查询条件组装查询语句,最终获得查询结果。我们可以通过在代码中打断点验证这一点,我们在方法的第一句上打上断点:

接下来我们运行页面,首先使【系统Id】字段包含an,接下来使【员工编号】字段结尾包含1:

回车后进入方法断点处:

criteria参数是Provider提供的一个封装对象,用于描述Grid中过滤栏中的查询条件,由于Grid中通常都有多个列,如果在多个列中都输入值,则我们可以通过其criteria对象的criterions集合获取多个查询条件,并通过集合中的SingleValueFilterCriterion获取查询条件和值:

通过调试信息可以很清楚的了解其运行原理。