Groovy findAll et chaque question d'étiquette
Question
Je les classes de domaine suivants:
class User = {
String username
...
Company company
}
class Company {
String name
...
}
C'est, il y a une relation n: 1 entre l'utilisateur et l'entreprise. Ces classes sont si et je ne peux pas les changer.
Au show.gsp je veux avoir les détails de la société ainsi que des liens vers les utilisateurs qui appartient à cette société.
Je sais que je peux y parvenir à écrire un tag propre, mais je suis sûr que ce serait possible en utilisant la chaque balise ou findAll balise .
Si je fais ce qui suit
<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>
J'ai essayé de passer le $ {} companyInstance comme paramètre, mais soit je suis une exception ou il ne fonctionne pas.
J'ai aussi essayé d'utiliser User.findAllByCompany .
Lorsque vous utilisez:
<g:findAll in="${user}" expr="it.company == ${companyInstance} ">
Je reçois un ensemble vide.
Y at-il un moyen facile d'y parvenir sans écrire une taglib?
Merci d'avance.
Luis
La solution
La balise <g:findAll>
itère sur une liste d'objets, mais il n'interroge pas le DB fait avec User.findAll(..)
Le code est:
<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>
Si vous voulez absolument utiliser g: findAll, vous devez d'abord construire la liste des utilisateurs comme suit:
<% def users = User.listOrderByUsername()%>
<g:findAll in="${users}" expr="it.company == ${companyInstance} ">
J'espère que cela aide,
Cordialement,
Fabien.
Autres conseils
Il est plus simple que vous pensez: ${userInstance.company.encodeAsHTML()}