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

时间:2013-08-06 06:29:44

标签: grails view controller

我正在研究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>

请帮帮我。

1 个答案:

答案 0 :(得分:0)

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

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

    $ {contact.groups}&lt;% - 群组列表 - %&gt;

  2. 或更合适

    <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