【问题标题】:Beginner Groovy初学者 Groovy
【发布时间】:2009-11-27 20:36:48
【问题描述】:

我正在关注 Graeme Keith Rocher 的“Grails 权威指南”中的代码示例,但遇到了一个相当不寻常的绊脚石。

基本上,存在 2 个域类 - 书签和标签。

书签:

class Bookmark {
static hasMany = [tags:Tag]

URL url
String title
String notes
Date dateCreated = new Date()

}

标签:

class Tag{
static belongsTo= Bookmark

Bookmark bookmark
String name

}

我被指示启动 Grails 控制台(这与 groovy 控制台相同)并创建一个新对象,如下所示。

def b = new Bookmark(url: new URL('http://grails.org/'), title:'Grails', notes:'Groovy')

这会导致:

Result: Bookmark : null

根据这本书,GORM 自动提供了一个 addTag 方法的实现。所以我编码...

b.addTag( new Tag(name: 'grails'))

只是对错误消息感到震惊:

Exception thrown: No such property: b for class: ConsoleScript1

groovy.lang.MissingPropertyException: No such property: b for class: ConsoleScript1 at ConsoleScript1.run(ConsoleScript1:2)

作者没有在书中说明这一点。我想知道是否有人可以帮助我?

谢谢。

【问题讨论】:

  • 提供的有一个错误:你用相同的代码定义了两次类Bookmark!!

标签: grails groovy groovy-console


【解决方案1】:

您正在阅读这本书的第一版吗?如果是这样,那就太陈旧了。 add* 方法自 0.5 起已被弃用。它已被 addTo* 取代,因此请改为:

b.addToTags( new Tag(name: 'grails'))

假设您的代码示例不应两次定义书签(复制和粘贴错误?)并且标签可能如下所示:

class Tag {
    String name
}

【讨论】:

    【解决方案2】:

    groovy 控制台与 grails 控制台不同。要访问 grails 控制台,请在您的应用程序目录中输入 grails console - 您应该会获得一个 Java GUI 应用程序。那时该示例可能会起作用,因为 grails 向标准 Groovy 添加了一些东西。

    另外,您的问题不是 addTag 方法,而是您定义的项目 b 找不到。尝试一次将整个脚本输入控制台并执行,而不是逐行执行。

    【讨论】:

    • 感谢您的澄清,但即使我在 CMD 中输入“grails 控制台”,启动的 Java GUI 应用程序的标题仍为“Groovy 控制台”。
    • 啊,你是对的.. 尽管如此,它的行为确实与命令行控制台不同,我推荐 GUI 版本,因为它更符合应用程序本身的工作方式。我只是在想——我没有这本书,也不知道你使用的是什么版本的 Grails——但语法不应该是 b.addToTags(..) 吗?这就是 Grails 1.1.1 中调用的 auto 方法。
    • 感谢您的推荐。关于 Grails 中存在的 b.addtoTags(..),但在书中,它说 addTag(..) 我决定将所有内容减少到最低限度,但它仍然失败。 Bookmark Class: class Bookmark { String title String notes } ...在 GroovyConsole 中,我输入: def b = new Bookmark(title:'Grails', notes:'Groovy') 仍然会导致: 结果: Bookmark : null 会你知道为什么它是空的吗?
    • 不确定,我已经关闭了我的工作机器,所以这有点猜测......但可能是因为 toString() 方法没有定义?尝试定义它,例如类似String toString() {return 'title}
    • .. ' 当然太多了 - 有没有办法编辑你自己的 cmets?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2012-12-20
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多