grails - 如果已提供列表,如何使用grails分页?

标签 grails pagination

我有一个看起来像这样的方法

def searchInAllField(String searchString) {

    Long companyId = sessionService.userProfile.companyId;
    return Vendor.createCriteria().list(){

        eq("companyId", companyId);
        if (searchString) {
            or {
                ilike("name", "%${searchString}%")
                ilike("businessName", "%${searchString}%")
                ilike("address", "%${searchString}%")
                ilike("description", "%${searchString}%")
                ilike("contactPerson", "%${searchString}%")
                ilike("mobileNumber", "%${searchString}%")
                ilike("officeNumber", "%${searchString}%")
                ilike("email", "%${searchString}%")
            }
        }
        order("businessName", "asc");

    } ?: [];
}

此方法接受searchString参数,并检查它是否与所有字段中的值匹配。

此方法的结果是一个列表,需要显示该列表并进行分页。如果我已经有了列表,如何进行grails分页?

最佳答案

要使用分页,您的searchInAllField()方法需要合并maxoffset参数。

def searchInAllField(String searchString, int max, int offset) {

    Long companyId = sessionService.userProfile.companyId;
    return Vendor.createCriteria().list(max: max, offset: offset) {

        eq("companyId", companyId);
        if (searchString) {
            or {
                ilike("name", "%${searchString}%")
                ilike("businessName", "%${searchString}%")
                ilike("address", "%${searchString}%")
                ilike("description", "%${searchString}%")
                ilike("contactPerson", "%${searchString}%")
                ilike("mobileNumber", "%${searchString}%")
                ilike("officeNumber", "%${searchString}%")
                ilike("email", "%${searchString}%")
            }
        }
        order("businessName", "asc")

    }
}

调用searchInAllField()的 Controller 方法将需要传递maxoffset并提供模型中的总数:
def someControllerMethod() {
    def vendors = whatever.searchInAllField(searchString, params.max, params.offset)

    render(model: [vendors: vendors, totalVendors: vendors.totalCount])
}

总计数(在这种情况下为vendors.totalCount)很重要。 g:paginate taglib需要它才能正常运行。

注意:g:paginate文档可能会误导您。它演示了使用DomainClass.count()作为总数。您需要的是查询结果计数,而不是数据库表中的记录总数。 totalCount属性提供了您所需的内容,但是只有在使用offsetmax执行查询时,您才可以获取该属性。

最后,您可以在GSP代码中使用g:paginate taglib呈现分页链接:
<g:paginate controller="someController" action="someControllerMethod" total="${totalVendors}" />

关于grails - 如果已提供列表,如何使用grails分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36148995/

相关文章:

web-services - 为什么使用分页标记?

php/html - 下拉菜单和分页的逻辑

php - jquery bootgrid 中的搜索结果为空

spring - 使用Spring Security修改基本身份验证授权流程?

java - Grails hibernate 方言

grails - grails 中独特的随机 token 生成

deployment - Grails在自定义环境中的运行应用程序中自动重新加载功能

facebook - Grails Spring Security Facebook插件不起作用

mysql - 如何对按日期排序的不断更新的提要进行分页

jquery - google搜索在分页时使用哪种jquery效果?