GSP访问控制器结果

时间:2012-10-25 19:11:22

标签: grails dojo grails-plugin dojox.grid.datagrid

我使用Grails的Dojo插件来填充dojox.grid.DataGrid对象。现在,与此网格关联的控制器操作将呈现定义网格内容的JSON。只要我预定义GSP中的列,这就可以正常工作。但是,我的应用程序需要能够根据某些数据库查询结果动态设置列数(及其关联名称)。此网格的JSON格式不包含列名,因此我无法在GSP中使用g:each标记来遍历名称。

我想做这样的事情,但我不能这样做:

<dojo:grid controller='foo' action='getGridData' ...>
   <g:each in=${columns}>
       <dojo:col width="15%" name="{it}" field="{it}">{row.{it}}<dojo:col/>
   </g:each>
</dojo:grid>

我给出了背景的Dojo插件的具体示例,但我想将其扩展到关于Grails的更一般的问题。如果我通过一个控制器动作构建一个GSP元素,该动作呈现JSON,我如何访问控制器中的其他东西以构建嵌套元素?这甚至可能吗?我还是网络开发的新手,所以我确信我误解了这些组件之间的一些粘合剂。

1 个答案:

答案 0 :(得分:1)

我看到你的代码出错的主要原因是你试图错误地引用列数据。

<g:each in="${columns}">
   <dojo:col width="15%" name="${it}" field="${it}">{row.{it}}<dojo:col/>
</g:each>

请注意in=值附近的引号和用于引用it变量的美元符号。

关于最后一位

{row.{it}}

我不清楚row在这种情况下是什么。所以我不确定如何解决这个问题,但也许这会让你朝着正确的方向前进。

您通常不会在一个请求中呈现GSP并构造JSON。这里会发生什么是渲染你的GSP,它接受你所有的taglib代码并生成HTML / JavaScript。然后,一旦浏览器呈现它,就会发生一个AJAX调用来获取JSON。

请记住,当GSP到达浏览器时,它只是HTML。