【发布时间】:2010-10-19 14:09:23
【问题描述】:
我有一个依赖于自定义 url 映射的插件。当我安装插件时,我需要复制插件的 UrlMappings.groovy 的内容并将其与安装插件的应用程序中的内容合并
不过,我想将这些 url 映射直接注册到 grails 框架中,而不会将内容复制到应用程序本身中。我不希望用户更改这些映射,因为它们是插件工作方式的核心。
任何人都可以给我提示,在哪里冒险实现这一目标。
谢谢
-肯
【问题讨论】:
标签: grails
我有一个依赖于自定义 url 映射的插件。当我安装插件时,我需要复制插件的 UrlMappings.groovy 的内容并将其与安装插件的应用程序中的内容合并
不过,我想将这些 url 映射直接注册到 grails 框架中,而不会将内容复制到应用程序本身中。我不希望用户更改这些映射,因为它们是插件工作方式的核心。
任何人都可以给我提示,在哪里冒险实现这一目标。
谢谢
-肯
【问题讨论】:
标签: grails
在grails-app/config/ 中创建另一个名称以UrlMappings.groovy 结尾的文件,并将自定义映射放入其中,例如myUrlMappings.groovy
【讨论】:
似乎我需要直接与 UrlMappingsHolderFactoryBean 交互才能做到这一点。我希望可能有更简单的方法来做到这一点。下面的代码取自 UrlMappingPlugin 本身,这是我发现的唯一可以帮助我解决问题的来源。
if (application.isUrlMappingsClass(event.source)) {
application.addArtefact(UrlMappingsArtefactHandler.TYPE, event.source)
BeanBuilder beans = beans {
grailsUrlMappingsHolderBean(UrlMappingsHolderFactoryBean) {
grailsApplication = application
}
}
ApplicationContext appCtx = event.ctx
beans.registerBeans(appCtx)
HotSwappableTargetSource ts = appCtx.getBean("urlMappingsTargetSource")
ts.swap appCtx.getBean("grailsUrlMappingsHolderBean")
}
【讨论】:
我个人使用 Java 方法并注入映射表单插件(我只有一个插件)。
但通常我的方法如下:
1.应用
class UrlMappings {
static mappings = DimaURLMappings.getMappings()
}
2.插件(称为“Dima”)
class DimaURLMappings {
static def getMappings(){
return {
//Mappings here
}
}
}
是的,我需要手动添加它,但另一方面,应用程序获取映射的位置非常明显,而且没有任何魔法。
我以这种方式使用它是因为我很少有应用程序使用我的插件。如果您的映射插件很少,您只需要合并它们,我认为这并不难。你也可以从插件返回闭包。但是不要忘记在应用程序中更改“委托”。
【讨论】: