快速业务通道

精通Grails: Grails 事件模型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
数据。 将这里所学到的知识与 “Grails 与遗留数据库” 中的 XML 备份和还原脚本相结合,就会得到了一个功 能强大的测试平台(testbed)。

因为 BootStrap.groovy 是一个可执行的脚本,而不是被动配置文件,所以理论上可以在 Groovy 中 做任何事情。您可能需要在启动时调用一个 Web 服务,通知中央服务器该实例正在运行。或者需要同步 来自公共源的本地查找表。这一切都有可能实现。

微型事件

了解一些大型事件后,现在看几个微型事件。

为域类添加时间戳

如果您提供几个特别的命名字段,GORM 会自动给它们添加时间戳,如清单 15 所示:

清单 15. 为字段添加时间戳

class Hotel{   String name   Date dateCreated   Date lastUpdated }

顾名思义,dateCreated 字段在数据第一次插入到数据库时被填充。lastUpdated 字段在每次数据库 记录更新之后被填充。

要验证这些字段在幕后被填充,需要再做一件事:在创建和编辑视图中禁用它们。为此,可以输入 grails generate-views Hotel 并删除 create.gsp 和 edit.gsp 文件中的字段,但有一种方法使 scaffolded 视图更具动态性。在 “用 Groovy 服务器页面(GSP)改变视图” 中,您输入了 grails install-templates,以便能够调试 scaffolded 视图。查看 scripts/templates/scaffolding 中的 create.gsp 和 edit.gsp。现在向模板中的 excludedProps 列表添加两个时间戳字段,如清单 16 所示 :

清单 16. 从默认 scaffolding 中删除时间戳字段

excludedProps = [''dateCreated'',''lastUpdated'',          ''version'',          ''id'',           Events.ONLOAD_EVENT,           Events.BEFORE_DELETE_EVENT,           Events.BEFORE_INSERT_EVENT,           Events.BEFORE_UPDATE_EVENT]

这会限制在创建和编辑视图中创建字段,但仍然在列表中保留字段并显示视图。创建一两个 Hotel 并 验证字段会自动更新。

如果应用程序已经使用这些字段名称,可以轻松地禁用此功能,如清单 17 所示:

清单 17. 禁用时间戳

static mapping = {   autoTimestamp false }

回忆一下 “Grails 与遗留数据库”,在那里还可以指定 version false 来禁用 version 字段的自 动创建和更新。

精通Grails: Grails 事件模型(7)

时间:2011-07-25 IBM Scott Davis

向域类添加事件处理程序

除了给域类添加时间戳,还可以引入 4 个事件挂钩:beforeInsert、befortUpdate、beforeDelete 和 onload。

这些闭包名称反映了它们的含义。beforeInsert 闭包在 save() 方法之前调用。beforeUpdate 闭包 在 update() 方法之前调用。beforeDelete 闭包在 delete() 方法之前调用。最后,从数据库加载类后 调用 onload。

假设您的公司已经制有给数据库记录加时间戳的策略,而且将这些字段的名称标准化为 cr_time 和 up_time。有几个方案可使 Grails 符合这个企业策略。一个是使用在 “Grails 与遗留数据库” 中学到 的静态映射技巧将默认 Grails 字段名称与默认公司列名称关联,如清单 18 所示:

清单 18. 映射时间戳字段

class Hotel{   Date dateCreated   Date lastUpdated   static mapping = {    columns {     dateCreated column: "cr_time"     lastUpdated column: "up_time"    }   } }

另一种方案是将域类中的字段命名为与企业列名称匹配的名称,并创建 beforeInsert 和 beforeUpdate 闭包来填充字段,如清单 19 所示(不要忘记将新字段设置为 nullable — 否则 save() 方法会在 BootStrap.groovy 中静默失败)。

清单 19. 添加 beforeInsert 和 bef

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号