SQL查询结果未显示在Grails视图中

时间:2014-10-20 20:45:53

标签: grails groovy

我已经关注了几个例子,但我似乎无法完成显示查询的最后部分。我没有收到任何错误,但它没有显示任何内容,即使查询在SQL中工作,我知道它有效。我无法弄清楚我错过了什么。任何帮助非常感谢。

我的控制器 -

import groovy.sql.Sql

class V1Controller {

   def dataSource

   def index() { 

      def nameList = {
         def db = new Sql(dataSource)
         def results = db.rows("SELECT NAME FROM table")
         //results.each{row -> log.debug .name}
         [results:results]
      }     
   }
}

我的观点 -

<p>
   Results:
   <g:each in="${results}">
      <tr>Row - <td>${results.name}</td></tr>
   </g:each>
</p>   

感谢您的回复,我尝试了这两种方式,但仍未在视图中获得任何结果。

        <g:each in="${results}">
            <tr>${it.NAME}</tr>
        </g:each>


        <g:each in="${results}" var="r">
            <tr>Name - ${r.'NAME'}</tr>
        </g:each>

谢谢约书亚!我在视图上使用了你的推荐,我还必须注释掉另一个动作名称'nameList',我想我已经意识到我试图创建一个嵌套动作并且不需要它。它现在有效!

def index() { 
    //def nameList = {
        def db = new Sql(dataSource)
        def results = db.rows("SELECT NAME FROM MIT_TEST_NAME")
        //results.each{row -> log.debug .name}
        return [results:results]
        db.close()
    //}     
}

1 个答案:

答案 0 :(得分:1)

这里有两个问题。首先,您没有正确使用<g:each>标记,其次根据您的SQL语句,您的属性名称不正确。

<g:each in="${results"} var="r">
  <tr>
    <td>${r.'NAME'}</td>
  </tr>
</g:each>

正如您在上面所看到的,您必须为标记赋予变量名称(在本例中),以便它知道如何处理循环范围内的单个元素。我选择r只是为了举个例子。其次,您会注意到,当您访问列名时,它使用单引号并匹配SQL语句中返回的列的大小写。

这可以解决您的问题。