1

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

可能是一个较小的问题,但需要解决它。

谢谢。

4

2 回答 2

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()  

仅供参考,您为用户提供的功能非常强大,他们可以对您的数据库运行任何类型的查询,甚至删除您的表。

于 2013-08-24T10:45:20.347 回答
0

好吧,我得到了以下代码,因为 val 是 KVP。

<tr>
                      <g:each status="counter" in="${row}" var="val">
                           <td>${val.value}</td>
                      </g:each>
</tr>
于 2013-08-24T11:06:32.157 回答