url映射到grails中的特定插件

时间:2015-03-04 09:25:39

标签: grails

我有一个grails应用程序,它被分成三个。

  • grailsapp本身
  • 插件#1
  • 插件#2

我需要创建一个URL映射,这样/ p1委托插件#1控制器和/ p2委托给插件#2控制器。首先是因为它们在语义上不同,但也因为它们有一些重叠的控制器名称。

可以通过映射自动实现,还是必须手动提供所有映射?

    static mappings = {
    "/p1/$controller/$action/$id?(.$format)?" {
        constraints {
            // use only controllers from p1
        }
    }
    "/p2/$controller/$action/$id?(.$format)?" {
        constraints {
            // use only controllers from p2
        }
    }
    "/$controller/$action?/$id?(.$format)?"{
        constraints {
            // only use app controllers??
        }
    }

    "/"(view:"/index")
    "500"(view:'/error')
}

1 个答案:

答案 0 :(得分:1)

仔细查看有关URL映射的Grails documentation,了解如何为控制器解析指定插件的映射。来自文档:

  

允许应用程序使用提供的插件   与控制器同名的控制器   应用程序和两个控制器都没有定义命名空间   属性,只要控制器在单独的包中。对于   例如,应用程序可能包含一个名为的控制器   com.accounting.ReportingController和应用程序可能会使用   提供名为的控制器的插件   com.humanresources.ReportingController。唯一的问题是   插件提供的控制器的URL映射需要   显式指定映射适用于   由插件提供的ReportingController。

     

请参阅以下示例。

static mappings = {
    "/accountingReports" {
        controller = "reporting"
    }
    "/humanResourceReports" {
        controller = "reporting"
        plugin = "humanResources"
    }
}

我怀疑在您的示例中,您的URL映射可能如下所示:

"/p1/$controller/$action/$id?(.$format)?" {
    plugin = "p1"
    constraints {
        // use only controllers from p1
    }
}
"/p2/$controller/$action/$id?(.$format)?" {
    plugin = "p2"
    constraints {
        // use only controllers from p2
    }
}
"/$controller/$action?/$id?(.$format)?"{
    constraints {
        // only use app controllers??
    }
}

尽管如此,文档的措辞确实说明了插件提供的控制器需要明确指定映射,这将向我指示上述动态映射可能不起作用。