0

我正在研究 grails 并面临一个问题,即如何在我的布局视图中获取与另一个(联系人)控制器有很多关系的控制器(在我的情况下为 contactGroup)数据。以下是我的域类代码...

class Contact {
    String number
    String name

    ...

    static hasMany = [groups: ContactGroup, messages: Message]
    static belongsTo = [Message, ContactGroup]
}

class ContactGroup {
String groupName
String description

...

static hasMany = [contacts: Contact, messages: Message]
}

下面是我的布局视图代码,用于获取所有组,括号中包含联系人数量......就像 Gmail 显示联系人和组列表一样。

 <h4>Contacts</h4>
    <g:link controller="contact" action="list" class="active"><h5>All (${smsserver.Contact?.list().size()})</h5></g:link>
    <g:layoutBody/>
    <g:each in="${smsserver.ContactGroup}" var="c">
        <g:link controller="contact" action="list">${c.findAll()}<br></g:link>
    </g:each>

请帮帮我。

4

1 回答 1

0

你有 m:n 关系。这意味着 1 个联系人有很多组,每个组有很多联系人。我对吗?并且您想显示给定联系人的所有组和组中的所有联系人。好的。

  1. 获取给定联系人的所有组:

    ${contact.groups} <%-- 群组列表 --%>

或更合适的

<ul>
<g:each in="${contact.groups}" var="group">
    <li>
        ${group.groupName} (${group.contacts.size()})
    </li>
</g:each>
</ul>

显示给定联系人的所有组和联系人

<ul>
<g:each in="${contact.groups}" var="group">
    <li>
        <b>${group.groupName}</b> (${group.contacts.size()})
        <ul>
        <g:each in="${group.contacts}" var="c">
            <li>
                ${c.name}
            </li>
        </g:each>
        </ul>
    </li>
</g:each>
</ul>

你的控制器:

class ContactController {

    def show(long id) {
        def contact = Contact.get(id)
        ['contact': contact]
        // or
        // render view:'YourPage', model:['contact': contact]
    }
}

更多详情http://grails.org/doc/latest/guide/theWebLayer.html#controllers

于 2013-08-06T09:26:06.903 回答