Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Grails排序给我带来了困难_Sorting_Grails - Fatal编程技术网

Sorting Grails排序给我带来了困难

Sorting Grails排序给我带来了困难,sorting,grails,Sorting,Grails,对grails来说有点陌生!我目前正在开发grails2.3.11,我不明白为什么下面的代码不能按预期工作 def listCommodity() { List<Commodity> commodities; if (params.searchBox) { commodities = Commodity.list().findAll { it.name.toLowerCase().contain

对grails来说有点陌生!我目前正在开发
grails2.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 ?: '']
        }
    }
但是当我在浏览器上测试它时!排序没有任何作用!我在视图上做了一个println,列表从未排序!我做错了什么?

需要检查两件事:

  • 在第一个参数中使用带true的
    排序(布尔,闭包)
    对列表本身进行排序,否则将创建一个副本
  • 标准参数是“desc”而不是“decs”
  • 祝你好运

    ....
                <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