我有以下域类:
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的情况下实现这一目标?
提前致谢。
路易斯
答案 0 :(得分: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} ">
我希望它有所帮助,
此致
小煜。
答案 1 :(得分:-1)
您认为这更简单:${userInstance.company.encodeAsHTML()}