Grails – 排序列表输出而不必具有SortedSet或Comparable模型?

我正在猛烈抨击我认为在Grails中解决的一个非常简单的问题:

说我有购物车般的模型;所以一个类Cart有多个项目,每个项目都属于购物车.一般来说,我不关心购物车中物品的顺序 – 我不关心它们存储在什么顺序,计算等等.但是,我确实想以相同的顺序显示它们.在我看来,这个逻辑应该能够在视图层中完整地存在,但是我能够找到的唯一解决方案告诉我将项目声明为模型层中的SortedSet.这也会影响我的控制器层,因为简单的List操作(如.collect {}现在需要额外的语法跳转以保持类型转换正确并保留我的排序.

对我来说,这是坚果,所以我必须错过一些简单的东西!有没有办法,例如,做一些像< g:each in =“${cart.items.sort {it.name}}”>或类似的东西,这样我只能在输出/视图层强制执行一致的显示顺序?编辑 – 见Matt的答案如下;这个版本确实有效.

感谢您的任何建议或指示!

解决方法

This 3rd party tag看起来它会做你需要的.如果没有,您可以随时制作自己的标签. Tag类可以像这样进行排序

class SortTagLib {

    static namespace = 'sort'

    def sort = { attrs ->

        // A closure that does the sorting can be passed as an attribute to the tag.
        // If it is not provided the default sort order is used instead
        def sorter = attrs.sorter ?: {item1,item2 -> item1 <=> item2}
        sorter = sorter as Comparator        

        // The collection to be sorted should be passed into the tag as a parameter
        Collections.sort(attrs.items,sorter)
    }
}

然后可以使用此标记按名称属性对对象集合进行排序,如下所示:

<sort:sort items="someCollection" sorter="${someComparatorClosure}"/>

someCollection引用的集合将在执行标记时就地排序.

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...