Grails UrlMappings для неизвестного числа переменных - PullRequest
5 голосов
/ 03 марта 2011

Я использую сопоставления 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 уровня глубоко, где N> = 1.

Как этого достичь?

Ответы [ 2 ]

6 голосов
/ 04 марта 2011

Звездочка, одинарная или двойная, используется для сопоставления URL-адресов wilcard .

Одна звездочка будет соответствовать чему-либо на данном уровне:

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')       
    }
}
0 голосов
/ 14 апреля 2019

Этот вопрос древний, но в отображениях URL вы также можете сделать это

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

это загрузит оставшуюся часть URI в переменную param

  /categories/animals/dogs/retrievers

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

Затем вы можете использовать это, чтобы делать различные динамические вещи

...