grails - 使用GroovyRowResult中的列名打印每一行的值

时间:2013-08-24 09:36:12

标签: sql grails groovy each

我想让用户触发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。我只希望在那里显示价值。

虽然可能是一个较小的问题,但需要修复它。

感谢。

2 个答案:

答案 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>