2010-01-08 87 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