【问题标题】:Grails sorting in a one-to-many relationshipGrails 以一对多的关系排序
【发布时间】:2012-10-24 01:22:17
【问题描述】:

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

我希望该列表按姓氏字母顺序排序。但是,每次我刷新 show.gsp 时,列表的顺序都会发生变化(似乎无法识别模式)。我在我的个人域中设置了一个映射以按姓氏“asc”排序,但这没有任何效果。

我修改了脚手架 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>

我可以在 show.gsp 或域中进行任何修改以使列表默认按字母顺序排序(除非单击可排序的列)?

谢谢!

【问题讨论】:

  • 即使我删除了添加的自定义代码(并且只使用脚手架的 show.gsp),问题仍然存在......

标签: grails


【解决方案1】:

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

class Person {
    …
    static mapping = {
        sort "lastName"
    }
}

查看文档here。如果排序似乎正确但仍然无法正常工作,您可以尝试停止应用并执行grails clean 并重新运行它。

更新: 答案是下面的cmets...

【讨论】:

  • 嗨迈克尔,我已经在我的个人域中拥有它,如上所述...(抱歉,为了清楚起见,我应该显示我的域的代码)。问题依然存在。
  • 嗯,没有骰子...我的映射与您在我的 Person 类中发布的完全一样。我还使用修改后的代码和仅使用常规脚手架视图执行了多次停止、清理、运行...
  • 好的。我假设您的下一个问题是您的一对多关系可能是问题所在。它可能会返回一个不可排序的 java.util.Set。向您发布域类,我们会看看。
  • 就是这样!我的课程域返回了一组。所以我在定义关系之前添加了一行来返回一个列表: List people = new ArrayList();静态 hasMany = [ 人:人 ]。添加后它起作用了。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
相关资源
最近更新 更多