Domanda

Ho le seguenti classi di dominio:

class User = {
       String username
       ... 
       Company company
 }

class Company {
    String name
    ...
}

Cioè, c'è un n: 1 rapporto tra utente e società. Queste classi sono così e non posso cambiarle.

Al show.gsp voglio avere i dettagli della società insieme con i link ai gli utenti che appartiene a questa azienda.

So che posso raggiungere questo obiettivo la scrittura di un proprio tag, ma sono sicuro che questo sarebbe possibile utilizzando il ogni tag o il findAll tag.

Se faccio il seguente

<g:each in="${User.findAll('from User order by username')}" var="userInstance">
    <li><g:link controller="role" action="show"
         id="${userInstance.id}">${userInstance.encodeAsHTML()}</g:link>
   </li>
</g:each>

Ho cercato di passare il $ {companyInstance} come parametro ma o ho ottenuto un'eccezione o non ha funzionato.

Inoltre ho provato ad utilizzare User.findAllByCompany .

Quando si utilizza:

<g:findAll in="${user}" expr="it.company == ${companyInstance}  ">

sto ottenendo un insieme vuoto.

C'è un modo semplice per raggiungere questo obiettivo senza scrivere una taglib?

Grazie in anticipo.

Luis

È stato utile?

Soluzione

I tag itera <g:findAll> oltre un elenco di oggetti, ma non interrogare il DB come fatto con User.findAll(..)

Il codice corretto è:

<g:each in="${User.findAll('from User as u where u.company=:company order by username', [company: companyInstance])}" var="userInstance">
    <li><g:link controller="role" action="show"
         id="${userInstance.id}">${userInstance.encodeAsHTML()}</g:link>
   </li>
</g:each>

Se si vuole assolutamente utilizzare g: findAll, allora è necessario prima creare l'elenco di utenti come segue:

<% def users = User.listOrderByUsername()%>
<g:findAll in="${users}" expr="it.company == ${companyInstance}  "> 

Spero che aiuta,

Saluti,

Fabien.

Altri suggerimenti

E 'più semplice che si pensa: ${userInstance.company.encodeAsHTML()}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top