一般动作
登录
Wiki: BROPEN ▼: Document Index
»
Space: FAQ ▼: Document Index
»
Page: 动态表如何排序
搜索
zh
页面动作
导出 ▼: 以PDF格式导出 以RTF格式导出 以HTML格式导出
更多动作 ▼: 打印预览 察看源码
欢迎进入Wiki » FAQ » 动态表如何排序?

# 动态表如何排序?

在2014-06-17 14:55上被李小翔修改
评论 (0) · 附件 (0) · 记录 · 信息

供稿人：许庆洋

Domain类中，hasMany另外一个Domain类时，其集合属性默认为Set类型，也就是无序的，因此，如果用动态表的方式录入数据，重新加载页面进行编辑或者查看时，其顺序总是毫无规律的发生变化。如：

class Foobar {
static hasMany = [items: FoobarItem];
}
class FoobarItem {
static belongsTo = [test: Foobar];
}
// gsp页面：
// <g:each in="${foobar.items}">....

解决这个问题有两种方式。

1、循环数据行时按照某个关键字排序，如序号：

<g:each in="${foobar.items.sort{it.sortorder}}" >..</g:each>
或：
<g:each in="${CollectionUtils.sort(foobar.items, 'asc', 'sortorder'}" >..</g:each>

2、上面自定义排序的方式虽然能让每次显示顺序都保持一致，但是如果并没有可用于排序的字段，或者需要和录入顺序完全保持一致，可以使用 List 来代替 Set 集合，如：

class Foobar {
List<FoobarItem> items;
static hasMany = [items: FoobarItem];
}
// gsp页面中可以自动排序：
// <g:each in="${foobar.items}">....

不过，使用 List 集合来保存子表数据时，数据库中子表里会生成一个数字类型的 idx 字段用于保存序号，如 items_idx，增删数据时必然会带来一定的开销，因此不适合 hasMany 大量数据的情况。

标签： grails BroFramework 动态表
在2013-12-03 09:14上被李小翔创建

- 评论 （0）
- 附件 （0）
- 记录
- 信息

# 快速链接

- 首页
- 新闻动态
- FAQ

Copyright © 2013 北京博瑞开源软件有限公司
京ICP备12048974号