【问题标题】:Paginate error - grails dynamic scaffolding分页错误 - grails 动态脚手架
【发布时间】:2011-06-25 00:19:18
【问题描述】:

在为一个视图中的两个域类问题寻找解决方案时,我遇到了 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 生命周期的文章,以便我可以看到什么时候通过?

感谢大家的帮助, 人

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

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

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

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

    【讨论】:

    • 脚手架将使用被覆盖的方法——这是一个不错的技巧。我经常只覆盖一个list 方法来应用一些限制。
    • 我几乎已经预料到了,这真是太好了 :-) @Victor 你能举个例子吗?
    【解决方案2】:

    如果你正在搭建 Book 类,它只会搭建 Books 的列表。

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

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

    【讨论】:

    • 好的,谢谢。我已经安装了模板,这就是为什么我在期望将两者都发送到视图时感到怀疑:-)
    【解决方案3】:

    有趣的是,在覆盖 index() 操作以便对结果进行不同的排序时,我发现在 Grails 2.3.7 中,默认值现在是 bookInstanceListbookInstance<b>Count</b>

    The documentation 没有从 bookInstance<b>Total</b> 更改!

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

    grails.scaffolding.templates.domainSuffix = 'Instance'

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      相关资源
      最近更新 更多