Grails在一对多关系中排序

问题描述:

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

我希望该列表按姓氏的字母顺序排序。但是,每次刷新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

即使我删除添加的自定义代码(只需使用脚手架show.gsp)的问题仍然存在...... – littleK

你能说明你是如何在域上设置的吗?它应该像这样...

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

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

UPDATE: 答案是下面的评论...

+0

喜迈克尔,我在我的Person域中已经有了,如上所述......(对不起,我应该为了清晰起见而为我的域显示代码)。问题仍然存在。 – littleK

+0

刚刚编辑...尝试一个停止,清洁,运行 –

+0

嗯,没有骰子...我有贴图完全一样,你张贴在我的人类。我也执行了停止,清洁,多次运行与我的修改代码和只有普通脚手架的意见... – littleK