【问题标题】:Grails UrlMappings for unknown number of variablesGrails UrlMappings 用于未知数量的变量
【发布时间】:2011-03-03 20:58:28
【问题描述】:

我正在使用 url 映射将 URL 目录结构转换为站点内的类别,目前使用:

class UrlMappings {

    static excludes = ['/css/*','/images/*', '/js/*', '/favicon.ico']
    static mappings = {       

        "/$category1?/$category2?/$category3?/"(controller: 'category')

        "500"(view:'/error')
        "404"(view:'/notFound')
    }
}

目前这支持三级深度的类别。我希望能够支持深度 N >= 1 的类别。

如何做到这一点?

【问题讨论】:

    标签: grails url-mapping


    【解决方案1】:

    星号(单星号或双星号)用于wilcard url mapping

    单个星号将匹配给定级别的任何内容:

    static mappings = {
        "/images/*.jpg"(controller:"image")
    }
    
    // Matches /images/logo.jpg, images/header.jpg and so on
    

    双星号将匹配多个级别的任何内容:

    static mappings = {
        "/images/**.jpg"(controller:"image")
    }
    
    // Matches /images/logo.jpg, /images/other/item.jpg and so on
    

    结合? 进行可选映射匹配,以下内容将在问题的上下文中起作用:

    class UrlMappings {
    
        static excludes = ['/css/*','/images/*', '/js/*', '/favicon.ico', '/WEB-INF/*']
        static mappings = {
            "/**?"(controller: 'category')
    
            "500"(view:'/error')
            "404"(view:'/notFound')       
        }
    }
    

    【讨论】:

      【解决方案2】:

      这个问题很古老,但在 url 映射中你也可以这样做

      "/categories/$categories**?"(controller:categories)
      

      这会将 uri 的其余部分加载到参数变量中

        /categories/animals/dogs/retrievers
      
        ///goes to categories controller and has...
        params.categories //= "animals/dogs/retrievers"
      

      然后你可以用它来做各种动态的事情

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-04
        相关资源
        最近更新 更多