Groovy таблица сортировки, когда столбец является отсортированным набором класса - PullRequest
1 голос
/ 27 октября 2011

У меня есть представление, в котором перечислены несколько объектов подрядчика. Последний столбец относится к адресам, которые являются отсортированным набором в объекте подрядчика. Я пытаюсь отсортировать эти столбцы и получаю исключение, что адреса свойств не определены в классе Contractors. Нужно ли обрабатывать отсортированный набор по-другому в контроллере?

<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 Ответ

1 голос
/ 27 октября 2011

Я не уверен, есть ли что-нибудь доступное из коробки для этого, но вот как я решил мою подобную проблему. В основном я должен был перехватить параметр sort и выполнить свою собственную сортировку.

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]
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...