Заводной поиск и вопрос по каждому тегу
Вопрос
У меня есть следующие доменные классы:
class User = {
String username
...
Company company
}
class Company {
String name
...
}
То есть между пользователем и компанией существует соотношение n:1.Эти классы таковы, и я не могу их изменить.
На show.gsp я хочу получить подробную информацию о компании вместе со ссылками на пользователей, которые принадлежат к этой компании.
Я знаю, что могу добиться этого, написав собственный тег, но я уверен, что это было бы возможно с помощью каждый тег или the the Найти все бирка.
Если я сделаю следующее
<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>
Я пытался передать ${companyInstance} в качестве параметра, но либо я получил исключение, либо это не сработало.
Я также пробовал использовать Пользователь.findAllByCompany.
При использовании:
<g:findAll in="${user}" expr="it.company == ${companyInstance} ">
Я получаю пустой набор.
Есть ли простой способ добиться этого без написания taglib?
Заранее благодарю.
Луис
Решение
Тот Самый <g:findAll>
тег выполняет итерацию по списку объектов, но он не запрашивает базу данных, как это делается с помощью User.findAll(..)
Правильный код - это:
<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>
Если вы абсолютно хотите использовать g: findAll, то сначала вам нужно создать список пользователей следующим образом:
<% def users = User.listOrderByUsername()%>
<g:findAll in="${users}" expr="it.company == ${companyInstance} ">
Я надеюсь, что это поможет,
С уважением,
Fabien.
Другие советы
Это гораздо проще, чем вы думаете: ${userInstance.company.encodeAsHTML()}