sorting - Grails排序让我很难受

标签 sorting grails

有点新的!我目前正在grails 2.3.11上工作,我看不到为什么以下代码无法按预期工作!

def listCommodity() {
        List<Commodity> commodities;

        if (params.searchBox) {
            commodities = Commodity.list().findAll {
                it.name.toLowerCase().contains("${params.searchBox.toLowerCase()}") ||
                        it.type.name.toLowerCase().contains("${params.searchBox.toLowerCase()}") ||
                        (it.type.parent ? it.type.parent.name.toLowerCase().contains("${params.searchBox.toLowerCase()}") : false)
            }

        } else {
            commodities = Commodity.list()
        }

        commodities?.sort { one, two ->
            if ("decs" == params?.order) {
                return two.name <=> one.name
            } else {
                return one.name <=> two.name
            }
        }

        def max = Math.min((params.max ?: 10) as Long, 100)
        def offset = Math.min((params.offset ?: 0) as Long, commodities.size() - 1)

        if (!commodities) {
            flash.message = "No Items found Here!"
            return [commodities: [], commoditiesCount: 0]
        } else {
            return [commodities: commodities[offset..Math.min(offset + max, commodities.size() - 1)], commoditiesCount: commodities.size(), searchBoxText: params.searchBox ?: '']
        }
    }

View :
....
            <tr>
                <g:sortableColumn params="${[searchBox:searchBoxText]}" property="name" title="${message(code: 'commodity.commodity.name.label', default: 'Name')}" />
            </tr>
....
            <% println commodities //here it prints the items in ascending %>
            <g:each in="${commodities}" status="i"  var="com">
                <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
                    <td>
                        ${com?.getName(lang)}
                    </td>
                </tr>
            </g:each>
....

该测试通过:
    given:
        mockDomain(CommodityType,[[name: "Cereals"],[name: "Group", parent: new CommodityType(name: 'Corea')]])
        mockDomain(Commodity,
                [[name:"Kea", type:CommodityType.findByName("Cereals")],
                 [name:"Shiro", type:CommodityType.findByName("Cereals")],
                 [name:"Other with ea", type:new CommodityType(name: "Grass")],
                 [name:"Barely", type:CommodityType.findByName("Group")],
                 [name:"Teff",type:CommodityType.findByName("Cereals")]])
    when:
        params.order = "decs"
        params.searchBox = "ea"
        def models = controller.listCommodity()

    then:
        5 == models.commodities.size()
        "Barely" == models.commodities[-1].name
        "Teff" == models.commodities[0].name
        "ea" == models.searchBoxText

    when:
        params.order = "asc"
        params.searchBox = "ea"
        def models2 = controller.listCommodity()

    then:
        5 == models2.commodities.size()
        "Barely" == models2.commodities[0].name
        "Teff" == models2.commodities[-1].name
        "ea" == models2.searchBoxText

但是当我在浏览器上测试它时!排序没有任何作用!我在 View 上做了一个println,列表从未排序!我究竟做错了什么?

最佳答案

要检查的两件事:

  • 在第一个参数中使用带true的sort(boolean, closure)对列表本身进行排序,否则将创建一个副本
  • 标准参数是“desc”而不是“decs”

  • 祝好运!

    关于sorting - Grails排序让我很难受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27171459/

    相关文章:

    grails - 在应用程序启动期间对Grails合并的配置进行故障排除

    grails - Grails映射模板

    javascript - 按特定顺序对数组进行排序

    jquery - 在 JPList 库中排序 'OR' 而不是 'AND'

    linux - 如何在 -sort 后只打印一列?

    grails - Grails插件安装遇到麻烦

    grails - Grails中的验证错误

    mysql - Grails/Hibernate 数据库在负载 : Unable to connect (even when pooling) 下崩溃

    javascript - typescript 错误 - 'boolean' 不可分配给类型 'number'

    javascript - 如何使用 js 数组,查找和分组项目?