代码之家  ›  专栏  ›  技术社区  ›  ken

颗粒曲面图

  •  2
  • ken  · 技术社区  · 14 年前

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

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

    任何人都可以给我提示去哪里冒险去实现这一点。

    谢谢你

    肯恩

    3 回复  |  直到 14 年前
        1
  •  2
  •   Aaron Saunders    14 年前

    在中创建另一个文件 grails-app/config/ 名字以 UrlMappings.groovy 并将定制的映射放在其中,例如 myUrlMappings.groovy

        2
  •  2
  •   mkoryak    14 年前

    似乎我需要直接与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")
        }
    
        3
  •  0
  •   Dmytro H.    9 年前

    个人而言,我使用Java方法和注入映射插件(我只有一个插件)。

    但一般来说,我的方法是:

    1、应用程序

    class UrlMappings {
        static mappings = DimaURLMappings.getMappings()
    }
    

    2.插件(称为“dima”)。

    class DimaURLMappings {
        static def getMappings(){
           return {
               //Mappings here
            }
        }
    }
    

    是的,我需要手动添加它,但另一方面,很明显应用程序在哪里获得了映射,并且没有任何魔力。

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