步骤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获取查询条件和值:
通过调试信息可以很清楚的了解其运行原理。
Attachments:
5.3.3.2-1.png (image/png)
5.3.3.2-2.png (image/png)
5.3.3.2-3.png (image/png)
5.3.3.2-4.png (image/png)
5.3.3.2-2.png (image/png)
5.3.3.2-3.png (image/png)
5.3.3.2-4.png (image/png)