我有一个依赖于自定义网址映射的插件。当我安装插件时,我需要复制插件的UrlMappings.groovy的内容并将其与安装插件的应用程序中的内容合并
但是我希望将这些url映射直接注册到grails框架中,而不将内容复制到应用程序本身。我不希望用户更改这些映射,因为它们是插件工作方式的核心。
任何人都可以告诉我在哪里冒险实现这一目标。
谢谢
-Ken
答案 0 :(得分:2)
在grails-app/config/
中创建另一个名称以UrlMappings.groovy
结尾的文件,并在其中放置自定义映射,例如myUrlMappings.groovy
答案 1 :(得分:2)
似乎我需要直接与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")
}
答案 2 :(得分:0)
我个人使用Java方法并注入插件映射(我只有一个插件)。
但一般来说我的方法如下:
1.App
class UrlMappings {
static mappings = DimaURLMappings.getMappings()
}
2.Plugin(称为“Dima”)
class DimaURLMappings {
static def getMappings(){
return {
//Mappings here
}
}
}
是的我需要手动添加它,但另一方面,应用程序获取映射的地方非常明显,并且没有任何魔法。
我以这种方式使用它,因为我有很少的应用程序使用我的插件。如果你有几个带映射的插件,你只需要合并它们我认为这并不难。你也可以从插件返回闭包。但是不要忘记在应用程序中更改“委托”。