1

我有以下域类:

class User = {
       String username
       ... 
       Company company
 }

class Company {
    String name
    ...
}

也就是说,用户和公司之间存在一对一的关系。这些课程是如此,我无法更改它们。

在 show.gsp 中,我想获得公司的详细信息以及属于该公司的用户的链接。

我知道我可以通过编写自己的标签来实现这一点,但我确信使用each标签或findAll标签可以做到这一点。

如果我执行以下操作

<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}作为参数传递,但要么出现异常,要么它不起作用。

我也尝试过使用User.findAllByCompany

使用时:

<g:findAll in="${user}" expr="it.company == ${companyInstance}  ">

我得到一个空集。

有没有一种简单的方法可以在不编写 taglib 的情况下实现这一点?

提前致谢。

路易斯

4

2 回答 2

0

<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}  "> 

我希望它有所帮助,

问候,

法比安。

于 2010-01-08T12:12:43.130 回答
-1

你认为更简单:${userInstance.company.encodeAsHTML()}

于 2010-01-08T08:08:13.907 回答