0

gsp に渡される前にコントローラの 1 つのフィールドに基づいてマップを並べ替えようとすると、コントローラで正常に動作しているように見えますが、gsp ページはアイテムを特定の順序でランダムに取得しているようです。

コントローラーコード。表示されるプロンプトを並べ替えようとしています。

 def show(Long id) {
    def reportInstance = Report.get(id)
    reportInstance.prompts = reportInstance.prompts.sort{it.displaySequence}
    [reportInstance: reportInstance]
}

それをprintlnステートメントに入れると、コンソールにソートされて表示されます。

操作しているドメイン オブジェクト:

class Report {

    Long id
    String name
    String department
    String description
    String summary
    Date activityDate

    static hasMany = [prompts:Prompt]

    static mapping = {
            sort "id"
           version false
           table 'reports'
           columns{
                   id column: 'id'
                   name column: 'name'
                   department column: 'department'
                   description column: 'description'
                   summary column: 'summary'
                   activityDate column: 'activity_date'
           }
           id generator:'sequence', params:[sequence:'reports_id_sequence']
    }

    static constraints = {
           name(nullable: false, maxSize: 60)
           department(nullable: false, maxSize: 60)
           description(nullable: true, maxSize: 120)
           summary(nullable: true, maxSize: 500)
           activityDate(nullable: false)

    }

    String toString() {
        "${name}"
    }

問題の gsp ページのスニペットを次に示します。

<g:if test="${reportInstance?.prompts}">
    <li class="fieldcontain">
        <h3 class="property-label">Prompts</h3>
        <br>
        <table id="prompts">
            <thead>
                <tr>
                    <th>${message(code: 'prompt.name.label', default: 'Name')}</th>
                    <th>${message(code: 'prompt.description.label', default: 'Description')}</th>
                    <th>${message(code: 'prompt.required.label', default: 'Required')}</th>
                    <th>${message(code: 'prompt.displaySeqno.label', default: 'Display Order')}</th>
                </tr>
            </thead>
            <tbody>
                <g:each in="${reportInstance.prompts}" status="i" var="prompt">
                    <tr class="${(i % 2) == 0 ? 'even' : 'odd'}" onclick='window.location = "${createLink(controller: "prompt", action: "edit", id: prompt.id)}"'>
                        <td>${fieldValue(bean: prompt, field: "name")}</td>
                        <td>${fieldValue(bean: prompt, field: "description")}</td>
                        <td>${prompt.required}</td>
                        <td class="displaySeqno">${prompt.displaySeqno}</td>
                    </tr>
                </g:each>
            </tbody>
        </table>
    </li>
</g:if>
4

1 に答える 1

1

あなたのReportドメインクラスpromptsSetではなく であるListため、そのように並べ替えることはできません。モデルでソートされたリストを個別に渡す必要があります。

def show(Long id) {
    def reportInstance = Report.get(id)
    [reportInstance: reportInstance,
     prompts:reportInstance.prompts.sort{it.displaySequence}]
}

それをGSPで使用します

<g:each in="${prompts}" status="i" var="prompt">

または単に を渡しreportInstanceて GSP でソートを行う

<g:each in="${reportInstance.prompts.sort{it.displaySequence}}"
    status="i" var="prompt">
于 2013-02-15T15:31:26.960 に答える