Grails – 排序列表输出而不必具有SortedSet或Comparable模型?
发布时间:2020-12-14 16:36:08 所属栏目:大数据 来源:网络整理
导读:我正在猛烈抨击我认为在Grails中解决的一个非常简单的问题: 说我有购物车般的模型;所以一个类Cart有多个项目,每个项目都属于购物车.一般来说,我不关心购物车中物品的顺序 – 我不关心它们存储在什么顺序,计算等等.但是,我确实想以相同的顺序显示它们.在我看
我正在猛烈抨击我认为在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引用的集合将在执行标记时就地排序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |