0

1 対多の関係を持つ Grails アプリケーションに、Course と Person という 2 つのドメインがあります。1 つのコースに多くの人が参加する場合があります。Course の show.gsp を表示すると、Course に登録されているすべての人の名前のリストが表示されます。

そのリストを姓のアルファベット順にソートしたいと思います。ただし、show.gsp を更新するたびに、リストの順序が変更されます (パターンを識別できないようです)。Person ドメインで、lastName "asc" で並べ替えるようにマッピングを設定しましたが、効果がありません。

スキャフォールディングされた 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 またはドメインのいずれかで、デフォルトでリストをアルファベット順にソートするように変更できるものはありますか (ソート可能な列をクリックしない限り)。

ありがとう!

4

1 に答える 1

3

ドメインレベルでどのように設定したかを示していただけますか? それは好きなはずです...

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

こちらのドキュメントをご覧ください。並べ替えが正しいように見えてもまだ機能しない場合は、アプリを停止してgrails cleanから再実行してみてください。

更新: 答えは以下のコメントです...

于 2012-10-24T01:38:11.887 に答える