Grails在一对多关系中排序

Grails在一对多关系中排序,grails,Grails,我在Grails应用程序中有两个域,它们之间有一对多的关系:Course和Person。一门课程可能有很多人。当我查看课程的show.gsp时,它将显示注册课程的所有人员的姓名列表 我想把名单按姓氏的字母顺序排列。但是,每次我刷新show.gsp时,列表的顺序都会改变(似乎无法识别模式)。我在Person域中设置了一个映射,以按姓氏“asc”排序,但这没有效果 我已经修改了scaffolded show.gsp,以便在表中显示名称以及其他复选框。下面是修改后的代码: <g:if test=

我在Grails应用程序中有两个域,它们之间有一对多的关系:Course和Person。一门课程可能有很多人。当我查看课程的show.gsp时,它将显示注册课程的所有人员的姓名列表

我想把名单按姓氏的字母顺序排列。但是,每次我刷新show.gsp时,列表的顺序都会改变(似乎无法识别模式)。我在Person域中设置了一个映射,以按姓氏“asc”排序,但这没有效果

我已经修改了scaffolded show.gsp,以便在表中显示名称以及其他复选框。下面是修改后的代码:

<g:if test="${courseInstance?.persons}">
            <br />
            <table>
                <thead>
                    <tr>
                        <th>#</th>
                        <g:sortableColumn property="person"
                            title="${message(code: 'person.lastName.label', default: 'Person')}" />
                        <g:sortableColumn property="paid"
                            title="${message(code: 'person.paid.label', default: 'Paid')}" />
                        <g:sortableColumn property="attended"
                            title="${message(code: 'person.attended.label', default: 'Attended')}" />
                    </tr>
                </thead>
                <tbody>
                    <g:set var="counter" value="${1}" />
                    <g:each in="${courseInstance.persons}" status="i" var="p">
                        <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
                            <td>
                                ${counter}
                            </td>
                            <td class="property-value" aria-labelledby="persons-label"><g:link
                                    controller="person" action="show" id="${p.id}">
                                    ${p?.encodeAsHTML()}
                                </g:link></td>
                            <td><g:checkBox name="paid" value="${p.paid}"
                                    onclick="${remoteFunction(action:'togglePaid', id:p.id,
                                params:'\'completed=\' + this.checked')}" /></td>
                            <td><g:checkBox name="attended" value="${p.attended}"
                                    onclick="${remoteFunction(action:'toggleAttended', id:p.id,
                                params:'\'completed=\' + this.checked')}" /></td>
                        </tr>
                        <g:set var="counter" value="${counter + 1}" />
                    </g:each>
                </tbody>
            </table>
        </g:if>


# ${counter} ${p?.encodeAsHTML()}
我是否可以在show.gsp或域中进行任何修改,使列表默认按字母顺序排序(除非单击了可排序的列)


谢谢

您能展示一下您是如何在域级别设置它的吗?应该是这样的

class Person {
    …
    static mapping = {
        sort "lastName"
    }
}
查看文档。如果排序看起来是正确的,但仍然不起作用,您可以尝试停止应用程序,执行
grails clean
并重新运行它

更新:
答案是下面的评论…

您能展示一下您是如何在域级别设置它的吗?应该是这样的

class Person {
    …
    static mapping = {
        sort "lastName"
    }
}
查看文档。如果排序看起来是正确的,但仍然不起作用,您可以尝试停止应用程序,执行
grails clean
并重新运行它

更新:
答案是下面的评论…

即使我删除了添加的自定义代码(仅使用scaffold show.gsp),问题仍然会出现…即使我删除了添加的自定义代码(仅使用scaffold show.gsp),问题仍然会出现…嗨,Michael,我的个人域中已经有了,如上所述。。。(对不起,为了清楚起见,我应该显示我的域的代码)。问题仍然存在。嗯,没有骰子…我的映射与您在我的Person类中发布的完全相同。我还使用修改后的代码和常规的框架视图执行了多次停止、清理和运行…好的。我假设您的下一个问题是您的一对多关系可能是问题。它可能会再次出现ning一个不可排序的java.util.Set。发布域类,我们来看看。就是这样!我的课程域正在返回一个集合。所以我在定义关系之前添加了一行,以返回列表:List persons=new ArrayList();static hasMany=[persons:Person]。在添加了它之后。感谢您的帮助!嗨,Michael,我的个人域中已经有了它,如上所述…(对不起,为了清晰起见,我应该显示我的域的代码)。问题仍然存在。嗯,没有骰子…我的映射与您在我的Person类中发布的完全相同。我还使用修改后的代码和常规的框架视图执行了多次停止、清理和运行…好的。我假设您的下一个问题是您的一对多关系可能是问题。它可能会再次出现ning一个不可排序的java.util.Set。发布域类,我们来看看。就是这样!我的课程域正在返回一个集合。因此,我在定义关系之前添加了一行,以返回一个列表:List persons=new ArrayList();static hasMany=[persons:Person]。添加后,它工作正常。感谢您的帮助!