Вопрос

У меня есть следующие доменные классы:

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()}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top