Paginate错误 - grails动态脚手架

时间:2011-02-10 16:55:50

标签: grails groovy

在寻找一个双域类一体化视图问题的解决方案时,我遇到了grails的脚手架教程,我看到了这个:

class BookController {
   def scaffold = Book
   // overrides scaffolded action to return both authors and books
   def list = {
     [ "books" : Book.list(), "authors": Author.list() ]
     }
 } 

它在下面说:

All of this is what is known as "dynamic scaffolding" where the CRUD interface is generated dynamically at runtime.

我对脚手架概念很陌生,而且有些东西我没有到达这里。我希望list.gsp是基于控制器返回参数动态生成的,因此我可以在一个视图中同时拥有这两个列表。我不知道这是否可能,这只是我期望在这里神奇地发生的事情。如果我错了,请纠正我。

如果是这种情况,那么我的应用程序出现了问题,我得到了:

 org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Tag [paginate] is missing required attribute [total] at /customer/list:45

所以这是视图中的东西,我没有,因为我希望它能得到支架。可能是错误是由我使用默认模板的事实引起的吗?我应该专门为我的需求创建一个新模板吗?另外,在grails生命周期中是否有一些aricle,以便我可以看到什么时候通过?

谢谢大家的帮助, 人

3 个答案:

答案 0 :(得分:2)

我相信你误解了Grails文档的这一部分。默认情况下,scaffolding提供索引,列表,显示,编辑,保存,更新和删除操作。但是,当他们的Grails文档说您可以返回书籍和作者时,并不意味着它会自动为两本书籍和作者构建一个新视图。这就是说,如果你想创建一个新的'列表'视图,即grails-app/views/book/list.gsp,你可以使它成为应用程序将使用你的list闭包和视图,而不是一个脚手架。< / p>

现在,你已经遇到了一些我以前从未考虑过的Grails琐事。如果你在没有指定新视图的情况下覆盖脚手架闭合会怎么样,Grails会给出404还是会使用scaffolded视图?它似乎使用了scaffolded视图。因此,默认列表视图使用分页,并且它期望看到xxxInstanceListTotal变量,然后paginate标记将其用于其total属性。由于没有提供任何值,paginate会抛出那里看到的异常。

脚手架是非常基本的功能,它不够智能,无法显示书籍和作者的综合列表。

答案 1 :(得分:1)

如果您是脚手架Book类,它只会搭建Book s的列表。

您可以发出命令grails install-templates以查看脚手架的作用。您可以安全地删除src / template / scaffolding。

在您的情况下,list.gsp模板需要两个变量:bookInstanceListbookInstanceTotalbookInstanceTotaltotal标记所需[paginate][2]参数的值,因此您会收到上述错误。

答案 2 :(得分:0)

有趣的是,在覆盖index()动作以便我可以对结果进行不同的排序时,我发现在Grails 2.3.7中,默认值现在是bookInstanceListbookInstanceCount

The documentation尚未改变bookInstanceTotal

这些名称由grails-app/conf/Config.groovy中的以下设置进一步决定:

grails.scaffolding.templates.domainSuffix = 'Instance'