Groovy findAll e ogni domanda tag
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
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()}