1

次のドメイン クラスがあります。

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

class Company {
    String name
    ...
}

つまり、ユーザーと会社の間には 1 対 1 の関係があります。これらのクラスはそうであり、私はそれらを変更することはできません.

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>オブジェクト リストを反復処理しますが、DB をクエリしません。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 に答える