问题描述
控制器
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建立模型。您必须在域类之间添加引用,并使用动态查找器或条件查询。