我已经关注了几个例子,但我似乎无法完成显示查询的最后部分。我没有收到任何错误,但它没有显示任何内容,即使查询在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()
//}
}
答案 0 :(得分:1)
这里有两个问题。首先,您没有正确使用<g:each>
标记,其次根据您的SQL语句,您的属性名称不正确。
<g:each in="${results"} var="r">
<tr>
<td>${r.'NAME'}</td>
</tr>
</g:each>
正如您在上面所看到的,您必须为标记赋予变量名称(在本例中),以便它知道如何处理循环范围内的单个元素。我选择r
只是为了举个例子。其次,您会注意到,当您访问列名时,它使用单引号并匹配SQL语句中返回的列的大小写。
这可以解决您的问题。