2010-01-08 80 views
1

我有以下域类:的Groovy的findAll并且每个标签问题

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

class Company { 
    String name 
    ... 
} 

即,有一个N:用户和公司之间1间的关系。 这些类是如此,我不能改变它们。

在show.gsp我想知道该公司的详细资料以及该公司的用户链接到 。

我知道我能做到这一点编写自己的标签,但我相信,这将使用每个标签或在的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?

在此先感谢。

路易斯

+1

你提到有n:1的关系,但是在你的公司类中,你不会引用用户的列表(或集合)。这是正常的吗? 目前我只能看到1:1的“belongsTo”关系。 – gizmo 2010-01-08 08:36:08

+0

是的。其实这对我正在尝试做的事已经足够了。 company_id是用户表中的外键..无论如何,这个问题一般适用:如何将参数传递给findAll标记。每个标签。感谢您的评论(+1对你) – Luixv 2010-01-08 09:36:06

回答

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

我希望它能帮助,

问候,

法比安斯基。

+0

非常感谢!它完美地工作。 – Luixv 2010-01-08 12:58:37

-1

它更简单,你想:${userInstance.company.encodeAsHTML()}

+0

我觉得我不够清楚。我在公司看来。我的意思是,我没有userInstance。我有公司实例。 – Luixv 2010-01-08 08:11:41