2013-08-06 2 views
0

Я работаю над grails и сталкиваюсь с проблемой, что я могу получить данные контроллера (в моем случае, contactGroup), который имеет отношения hasMany с другим (контактным) контроллером в моем представлении макета , Ниже мои коды класса домена ...Получение данных контроллера в моем представлении макета

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> 

Пожалуйста, помогите мне.

ответ

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

+0

ли точно так же ... Но это показывает ошибку «Не удается получить свойство„группы“на нулевой объект» – user2515559

+0

вы должны поставить «контакт» с моделью. –

+0

Хорошо, но как? – user2515559

Смежные вопросы