我在Grails应用程序中有两个域,它们具有一对多的关系:Course和Person。一门课程可能有很多人。当我查看课程的show.gsp时,它将显示注册课程的所有人名的列表。
我希望该列表按姓氏的字母顺序排序。但是,每次刷新show.gsp时,列表的顺序都会发生变化(似乎无法识别模式)。我在Person域中设置了一个映射,按lastName“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>
我是否可以在show.gsp或域中进行任何修改以使列表默认按字母顺序排序(除非单击可排序的列)?
谢谢!
答案 0 :(得分:3)
您能否展示如何在域级别设置它?它应该是这样......
class Person {
…
static mapping = {
sort "lastName"
}
}
查看文档here。如果排序看起来确实正确但仍无法正常工作,您可以尝试停止应用并执行grails clean
并重新运行它。
<强>更新强> 答案是以下评论......