Grails如何在g:each中显示HQL JOIN值

问题描述

我想问我如何在查看页面显示代码结果

控制器

query =" select subs.firstName,trx.currentBalance from Transaction trx,Subscriber subs where 
trx.subscriberID = subs.msisdn and trx.subscriberID = '0' and trx.date ='2020-09-04'"
query= Transaction.executeQuery(query);

使用此代码

查看页面

<g:each in="${listQueryTable}" status="i" var="userInstance">
<tr>
<td>${userInstance.firstName}</td>      <-- this code does not work for me
<td>${userInstance.currentBalance}</td> <-- this code does not work for me
</tr>
</g:each>

解决方法

在控制器中使用像您一样的HQL查询,您可以在GSP中使用如下标记显示其值:

<g:each in="${listQueryTable}" status="i" var="userInstance">
<tr>
<td>${userInstance[0]}</td> 
<td>${userInstance[1]}</td>
</tr>
</g:each>

因为listQueryTable的每个元素都是一个Object[]

作为一种变体,您可以将每个列表的元素变成地图,如下所示:

query =" select subs.firstName,trx.currentBalance,..."
listQueryTable = Transaction.executeQuery(query).collect{ [ firstName:it[0],currentBalance:it[1],... ] }

然后您可以使用原始GSP进行显示。

正确的解决方案是摆脱原始的HQL查询,并使用Hibernate / GORM手段为View建立模型。您必须在域类之间添加引用,并使用动态查找器或条件查询。