2012-10-24 79 views
0

我在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

回答

3

你能說明你是如何在域上設置的嗎?它應該像這樣...

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

查看文檔here。如果排序似乎是正確的,但仍然無法正常工作,您可以嘗試停止應用程序並執行grails clean並重新運行它。

UPDATE: 答案是下面的評論...

+0

喜邁克爾,我在我的Person域中已經有了,如上所述......(對不起,我應該爲了清晰起見而爲我的域顯示代碼)。問題仍然存在。 – littleK

+0

剛剛編輯...嘗試一個停止,清潔,運行 –

+0

嗯,沒有骰子...我有貼圖完全一樣,你張貼在我的人類。我也執行了停止,清潔,多次運行與我的修改代碼和只有普通腳手架的意見... – littleK