FindAll maravilloso y cada pregunta etiqueta
Pregunta
Tengo las siguientes clases de dominio:
class User = {
String username
...
Company company
}
class Company {
String name
...
}
Es decir, no es un n: 1 relación entre el usuario y la empresa. Estas clases son tan y no puedo cambiarlas.
Al show.gsp Quiero tener los detalles de la empresa junto con enlaces a los usuarios que pertenece a esta empresa.
Yo sé que puedo lograr esto escribiendo una etiqueta propia, pero estoy seguro de que esto sería posible utilizando el cada etiqueta o la etiqueta de la findAll .
Si hago lo siguiente
<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>
He tratado de pasar el $ {} companyInstance como un parámetro, pero tampoco me dieron una excepción o no funcionó.
También he intentado usar User.findAllByCompany .
En el uso:
<g:findAll in="${user}" expr="it.company == ${companyInstance} ">
Me estoy haciendo un conjunto vacío.
¿Hay una manera fácil de lograr esto sin escribir una taglib?
Gracias de antemano.
Luis
Solución
Las etiquetas itera <g:findAll>
más de una lista de objetos, pero no se consulta la base de datos como se hace con User.findAll(..)
El código correcto es:
<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 desea utilizar absolutamente g: findAll, entonces primero hay que construir la lista de usuarios de la siguiente manera:
<% def users = User.listOrderByUsername()%>
<g:findAll in="${users}" expr="it.company == ${companyInstance} ">
Espero que ayude,
Saludos,
Fabien.
Otros consejos
Es más simple que usted piensa: ${userInstance.company.encodeAsHTML()}