Grails URLMappings

时间:2010-10-19 14:09:23

标签: grails

我有一个依赖于自定义网址映射的插件。当我安装插件时,我需要复制插件的UrlMappings.groovy的内容并将其与安装插件的应用程序中的内容合并

但是我希望将这些url映射直接注册到grails框架中,而不将内容复制到应用程序本身。我不希望用户更改这些映射,因为它们是插件工作方式的核心。

任何人都可以告诉我在哪里冒险实现这一目标。

谢谢

-Ken

3 个答案:

答案 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
        }
    }
}

是的我需要手动添加它,但另一方面,应用程序获取映射的地方非常明显,并且没有任何魔法。

我以这种方式使用它,因为我有很少的应用程序使用我的插件。如果你有几个带映射的插件,你只需要合并它们我认为这并不难。你也可以从插件返回闭包。但是不要忘记在应用程序中更改“委托”。