2011-10-26 7 views
1

私はいくつかの請負業者オブジェクトをリストしたビューを持っています。最後の列は、契約者オブジェクト内のソートされたセットであるアドレスからのものです。これらの列をソートしようとしていますが、プロパティのアドレスがクラスのContractorで定義されていないという例外があります。コントローラーでソートされたセットを別々に処理する必要がありますか?列がソートされたクラスのセットである場合のGroovyテーブルのソート

<table width="100%"> 
       <thead> 
       <tr> 
        <th></th> 
        <g:sortableColumn property="status" title="${message(code: 'contractor.status.label', default: 'Status')}" params="[statuses:statuses,name:name,nameOperator:nameOperator ?: 'CONTAINS']"/> 
        <g:sortableColumn property="contractorName" title="${message(code: 'contractor.contractorName.label', default: 'Name')}" params="[statuses:statuses,name:name,nameOperator:nameOperator ?: 'CONTAINS']"/> 

        <g:sortableColumn property="addresses.address" title='Address' params="[statuses:statuses,name:name,nameOperator:nameOperator ?: 'CONTAINS']"/> 

       </tr> 
       </thead> 
       <tbody> 
       <g:each in="${contractorList}" status="i" var="contractor"> 
        <tr class="${(i % 2) == 0 ? 'odd' : 'even'}"> 

         <td> 
          <g:link action="show" id="${contractor.id}">show</g:link> 
          &nbsp;|&nbsp; 
          <g:link action="edit" id="${contractor.id}">edit</g:link> 
         </td> 
         <td>${contractor.status}</td> 
         <td>${contractor.contractorName}</td> 
         <td>${contractor?.addresses?.address}</td> 

        </tr> 
       </g:each> 
       </tbody> 
      </table> 

コントローラ内のロジック:

order(params.sort, params.order) 

私は任意のヘルプは、おかげでいただければ幸いGroovyの/ Grailsのに非常に新しいです!

答えて

1

これには何もありませんが、私の似たような問題をどのように解決したのか分かりません。基本的に私は、ソートのparam intereceptと私自身のソート:

if (params.sort && params.sort == "state") { 
    tasks = Task.activeOnly.open.unassigned.list() //<--my query 
    tasks = sortByState(tasks,params) //<--custom sort 
} 

--- sortByStateがこれであるしなければならなかった:

private List sortByState(tasks, params){ 
     tasks.sort{Task.STATES.indexOf(it.state)} //<-- this is my custom sorter 
     if (params.order == "DESC") { 
      tasks = tasks.reverse() 
     } 
     def begin = params.int('offset') //<-- next two lines are for paging offsets 
     def end = Math.min(begin+params.int('max'),tasks.size()-1) 
     return tasks[begin..end] 
    } 
+0

おかげDmitryB!私はこれを試して、それがどうなるか見てみましょう。 – user648869

関連する問題