Grails UrlMappings用于未知数量的变量

时间:2011-03-03 20:58:28

标签: grails url-mapping

我正在使用网址映射将网址目录结构转换为网站中的类别,目前正在使用:

class UrlMappings {

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

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

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

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

如何实现这一目标?

2 个答案:

答案 0 :(得分:6)

星号(单号或双号)用于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')       
    }
}

答案 1 :(得分:0)

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

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

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

  /categories/animals/dogs/retrievers

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

然后您可以使用它来执行各种动态的事情