gpt4 book ai didi

grails - Grails发布关联列表中的重复姓氏

转载 作者:行者123 更新时间:2023-12-02 15:11:28 25 4
gpt4 key购买 nike

我有一个具有两个域的Persons和Course的脚手架Grails应用程序。人属于类(class),类(class)有许多人。我为类(class)修改了show.gsp,以列出与所选类(class)相关的所有人员。

我遇到的问题是,显示给定类(class)中所有人员的列表没有显示数据库中姓氏重复的人员。例如,如果我有4个人:“John Doe”,“Jane Doe”,“Joe Doe”,“Edward Smith”,则列表将仅显示:

  • Jane Doe
  • 爱德华·史密斯

  • 但是,这4个人全部在数据库中。另外,/ person / list将显示所有名称。因此,问题仅在于与类(class)相关的人员列表。请参阅下面的相关代码。有什么想法吗?

    人员域:
    class Person implements Comparable {

    static mapping = { sort lastName: "asc" }

    // Needed to sort association in Course domain (due to Grails bug)
    int compareTo(obj) {
    lastName.compareToIgnoreCase( obj.lastName );
    }

    String firstName
    String lastName
    String email

    Course course

    static belongsTo = [ course:Course ]

    static constraints = {
    firstName size: 1..50, blank: false
    lastName size: 1..50, blank: false
    email email: true
    course()
    firstName(unique: ['lastName', 'email'])
    }

    String toString() {
    return this.lastName + ", " + this.firstName;
    }
    }

    类(class)域:
    class Course {

    int maxAttendance
    SortedSet persons

    static hasMany = [ persons:Person ]

    static mapping = {
    persons cascade:"all-delete-orphan"
    }

    def getExpandablePersonList() {
    return LazyList.decorate(persons,FactoryUtils.instantiateFactory(Person.class))
    }

    static constraints = {
    maxAttendance size: 1..3, blank: false
    }
    }

    修改了类(class)的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')}" />

    </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()}</td>

    </tr>
    <g:set var="counter" value="${counter + 1}" />
    </g:each>
    </tbody>
    </table>
    </g:if>

    最佳答案

    您已经为关联使用了SortedSet,并且Person的compareTo认为姓氏相同的两个人是相同的,因此第二个及以后姓氏相同的人不会被添加到该集合中。

    关于grails - Grails发布关联列表中的重复姓氏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925248/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com