【问题标题】:Grails- groovy sql each row to be displayed in gsp viewGrails-groovy sql 每一行都显示在 gsp 视图中
【发布时间】:2015-01-18 14:08:33
【问题描述】:

我想将服务代码中每一行的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 视图中看到我的查询结果?我哪里出错了。

【问题讨论】:

  • 鉴于您的服务返回地图,您的数据位于returnMap 下,因此您的模型看起来像health.returnMap 而不仅仅是health

标签: grails gsp


【解决方案1】:

您试图获取模型的错误密钥。

您的服务返回一个哈希 [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()
}

【讨论】:

  • 我使用的是 Grails 1.7.3 版本。当我按照您的建议进行操作时,我收到消息:没有方法签名:groovy.sql.Sql.eachRow() 适用于参数类型:(java.lang.String) 值:[SELECT distinct SOURCE,count(1) as COUNT from fact group by source] 可能的解决方案:eachRow(java.lang.String, groovy.lang.Closure) 类:ChangePasswordFilter
  • 谢谢。我想通了。我的疑问是我想在我的 gsp 视图中显示字段,例如 SOURCE 和 Count as table 表单。在我的控制器中,我正在返回渲染 (template:'healthview', model:[health:health.collect{ it.values() }]) 我正在使用上面显示的相同 gsp 代码,但我无法整齐地显示它表格形式
【解决方案2】:

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

  • 运行您的应用调试模式

  • 使用 log.debug

  • 使用 println

或者,如果您正在执行这些操作并且在您的控制台上看到任何错误,请在此处发布。

【讨论】:

  • 这可能是评论,但不是答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
相关资源
最近更新 更多