grails中createCriteria功能强大,可以实现比findBy更为灵活的查询方式,但是查询后如何实现显示并分页,经过摸索,得到如下可用代码:
def carNum = params.carNum
def carDriver = params.carDriver
def carType = params.carType
def carStatus = params.carStatus
def carStartPrice = params.carStartPrice
def carEndPrice = params.carEndPrice
def carStartBoughtDate = params.carStartBoughtDate
def carEndBoughtDate = params.carEndBoughtDate
params.max = Math.min(params.max ? params.int('max') : 10, 100)
def filter = {
carNum ?carInfo{eq('carNum', carNum )} : true
carDriver ? carInfo{like("carDriver",'%'+carDrive+'%')} : true
carType ? carInfo{eq('carType', carType)} : true
carStatus ?carInfo{eq("carStatus",carStatus)}: true
(carStartPrice && carEndPrice) ? between('carPrice', carStartPrice, carEndPrice) : true
(carStartBoughtDate && carEndBoughtDate) ? between('carBoughtDate', carStartBoughtDate, carEndBoughtDate) : true
}
[carFeeInstanceList: CarFee.createCriteria().list(params, filter), listTotal: CarFee.createCriteria().count(filter)]