向 Grails 中的对象添加方法并使其全局可用
Posted
技术标签:
【中文标题】向 Grails 中的对象添加方法并使其全局可用【英文标题】:Add a method to an object in Grails and have it usable globally 【发布时间】:2012-02-29 07:10:01 【问题描述】:我正在尝试通过利用 Groovy 的 metaclass
功能向 String 类添加一些字符串实用方法。现在我的 BootStrap.groovy 脚本的 init 闭包中有类似的东西:
String.metaClass.upper =
delegate.toUpperCase()
问题是这个 upper
方法只在 BootStrap 的范围内可用...试图在 Grails 应用程序的其他任何地方使用它都不起作用,并且我得到方法丢失错误。
有没有办法让这些方法随处可用?
【问题讨论】:
【参考方案1】:在测试和运行环境中都会发生这种情况吗?存在一个错误,即所有 metaClass
更改在每次单元测试后都会回滚:http://jira.grails.org/browse/GRAILS-8596
【讨论】:
我没有尝试在测试中使用这些方法。当我尝试加载使用我添加的方法之一的视图时,我可以看到它们不存在。但是,如果我在 BootStrap 中的定义之后放置一个断点,我可以添加使用我正确添加的方法的手表,但是一旦它们超出范围,我就会得到方法缺失错误。 我用一个新的 grails 2.0 项目尝试了你的String.upper()
示例,它在控制器和视图中都适用于我。你能发布整个BootStrap.groovy
和你用来调用它的代码吗?以上是关于向 Grails 中的对象添加方法并使其全局可用的主要内容,如果未能解决你的问题,请参考以下文章