【问题标题】:Grails URLMappingsGrails URL映射
【发布时间】:2010-10-19 14:09:23
【问题描述】:

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

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

任何人都可以给我提示,在哪里冒险实现这一目标。

谢谢

-肯

【问题讨论】:

    标签: grails


    【解决方案1】:

    grails-app/config/ 中创建另一个名称以UrlMappings.groovy 结尾的文件,并将自定义映射放入其中,例如myUrlMappings.groovy

    【讨论】:

    • 这不是我想要的。根本不需要在应用程序中使用它,我的问题是在插件运行时通知 grails 框架这种映射。应用程序无需知道这一点。
    • @ken 您所说的框架“是”应用程序...除非在应用程序中指定,否则您的应用程序将无法解析 UrlMapping。
    • 亚伦,谢谢你,但这是一个给定的伙伴。我已经用我需要的所有东西定义了我的 UrlMappings.groovy,但我不想在我正在使用的应用程序中公开它。如果我只将 URLMappings.groovy 放在我的插件中,grails 将无法识别它。
    【解决方案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")
        }
    

    【讨论】:

      【解决方案3】:

      我个人使用 Java 方法并注入映射表单插件(我只有一个插件)。

      但通常我的方法如下:

      1.应用

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

      2.插件(称为“Dima”)

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-24
        相关资源
        最近更新 更多