Grails 在我的布局视图中获取控制器数据

Grails 在我的布局视图中获取控制器数据,grails,view,controller,Grails,View,Controller,我正在研究grails,面临的问题是如何获取控制器(在我的例子中是contactGroup)的数据,该数据与布局视图中的另一个(contact)控制器有很多关系。下面是我的域类代码 class Contact { String number String name ... static hasMany = [groups: ContactGroup, messages: Message] static belongsTo = [Message, Con

我正在研究grails,面临的问题是如何获取控制器(在我的例子中是contactGroup)的数据,该数据与布局视图中的另一个(contact)控制器有很多关系。下面是我的域类代码

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>
联系人
全部(${smsserver.Contact?.list().size()})
${c.findAll()}

请帮帮我。

你有m:n关系。这意味着一个联系人有多个组,每个组有多个联系人。我说得对吗?您希望显示给定联系人的所有组和组中的所有联系人。 嗯

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

    ${contact.groups}

  • 还是更合适

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

    有关更多详细信息,请按相同的方式执行。。。但它显示了错误“无法获取null对象上的属性“groups”,您必须将“contact”放入模型。
    <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]
        }
    }