Grails- groovy sql 要在 gsp 视图中显示的每一行

Grails- groovy sql each row to be displayed in gsp view

我想显示 sql 从服务代码到我的 gsp 视图的每一行的结果。

我的服务代码是:

def health()  
{  
    def schemaList      = [:]  
    groovy.sql.Sql sql = new groovy.sql.Sql(dataSource);  
    sql.eachRow("SELECT SOURCE, count(1) as COUNT from fact group by SOURCE");  
    ArrayList returnResults = []  
    sqlStatement.eachRow(sqlString)
    {  
        returnResults<<it.toRowResults()   
    }   
    sqlStatement.close()   
    return[returnMap:returnResults]  
}

我的控制器代码是:

def stats =  {    
   def health = AccessLogService.heath()  
   render (template:'healthview', model:[health:health])
}

我的gsp观点如下:

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta name="layout" content="admin" />
  <title>Health</title>
</head>

<body>
  <SCRIPT language="JavaScript">
  </SCRIPT>
  <br />
  <br />
  <font style='font-size:14px;font-weight:bold;'>Health Condition</font>
  <div id='overall'>
    <g:if test="${health.size() > 0}">
      <table border="1">
        <thead>
          <tr>
            <th>Source</th>
            <th>Count</th>
          </tr>
        </thead>
        <tbody>
          <g:each in="${health}" status="i" var="thisRecord">
            <tr>
              <td>${thisRecord.SOURCE}</td>
              <td>${thisRecord.COUNT}</td>
            </tr>
          </g:each>
        </tbody>
      </table>
    </g:if>
  </div>
</body>
</html>

我无法在 gsp 视图中看到我的查询结果?我哪里错了。

在您的服务中声明的 sqlStatement 变量在哪里?我认为这是错误的。
以及调试程序所需的建议。例如,测试服务 returns 的结果是否为:

  • 运行 您的应用调试模式

  • 使用 log.debug

  • 使用 println

或者,如果您正在执行这些操作并且在您的控制台上看到任何错误 post,那就是这里。

您正在尝试获取错误的模型密钥。

你服务 returns 哈希 [returnMap:returnResults] 所以你的控制器呈现模型:[health:health] -> [health:[returnMap:returnResults]].

因此在您的 gsp 中,您应该参考 health.returnMap 以查看列表:

 <g:if test="${health.returnMap}">
   ...
      <g:each in="${health.returnMap}" status="i" var="thisRecord">
        <tr>
          <td>${thisRecord.SOURCE}</td>
          <td>${thisRecord.COUNT}</td>
        </tr>
      </g:each>
   ...
 </g:if>

更新:

代码看起来很奇怪...它应该是这样的:

ArrayList returnResults = []
sql.eachRow("SELECT SOURCE, count(1) as COUNT from fact group by SOURCE"){
  returnResults << it.toRowResults()
}