我想让用户触发SQL查询,然后在grails视图页面中查看结果。
我的QueryController.groovy
是
def query(){
def headers = null; //["id","name"]
Sql sql = new Sql(dataSource)
def rowResults = sql.rows(params.query) //GroovyRowResult
rowResults.eachWithIndex { row, index->
if (headers == null) {
headers = row.keySet()
}
}
[headers : headers, resultList: rowResults, total : rowResults.size() ]
}
在Grails视图页面(query.gsp
),
<table class="table table-striped">
<thead>
<tr>
<g:each in="${headers}" var="header">
<g:sortableColumn property="header" title="${header}" />
<th></th>
</g:each>
</tr>
</thead>
<tbody>
<g:each in="${resultList}" var="row">
<tr>
<g:each status="counter" in="${row}" var="val">
<td>${val}</td>
</g:each>
</tr>
</g:each>
</tbody>
</table>
视图中的<td>${val}</td>
部分未按预期运行,因为它将结果显示为id=1
而不是1
。我只希望在那里显示价值。
虽然可能是一个较小的问题,但需要修复它。
感谢。
答案 0 :(得分:3)
尝试访问每张地图上的值来访问值:
<table class="table table-striped" border="1">
<thead>
<tr>
<g:each in="${headers}" var="header">
<g:sortableColumn property="header" title="${header}" />
</g:each>
</tr>
</thead>
<tbody>
<g:each in="${resultList}" var="row">
<tr>
<g:each status="counter" in="${row}" var="val">
<td>${val.value}</td>
</g:each>
</tr>
</g:each>
</tbody>
</table>
/
同样在您的查询操作中,您可以直接从地图中获取标题:
def query(){
def headers = null; //["id","name"]
Sql sql = new Sql(dataSource)
def rowResults = sql.rows("select * from Message;") //GroovyRowResult
// rowResults is a list, you can access it by its index
headers = rowResults[0].keySet()
仅供参考,您为用户提供的功能非常强大,他们可以针对您的数据库运行任何类型的查询,甚至可以删除您的表。
答案 1 :(得分:0)
好吧,我得到了以下代码,因为val是KVP。
<tr>
<g:each status="counter" in="${row}" var="val">
<td>${val.value}</td>
</g:each>
</tr>