Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Grails UrlMappings for unknown number of variables

I'm using url mappings to translate the URL directory structure into categories within a site, currently using:

class UrlMappings {

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

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

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

At present this supports categories three levels deep. I'd like to be able to support categories N levels deep where N >= 1.

How can this be achieved?

like image 256
Jon Cram Avatar asked Mar 03 '11 20:03

Jon Cram


1 Answers

The asterisk, either single or double, is used for wilcard url mapping.

A single asterisk will match anything at the given level:

static mappings = {
    "/images/*.jpg"(controller:"image")
}

// Matches /images/logo.jpg, images/header.jpg and so on

A double asterisk will match anything on more than one level:

static mappings = {
    "/images/**.jpg"(controller:"image")
}

// Matches /images/logo.jpg, /images/other/item.jpg and so on

Combined with the ? for optional mapping matches, the following will work in the context of the question:

class UrlMappings {

    static excludes = ['/css/*','/images/*', '/js/*', '/favicon.ico', '/WEB-INF/*']
    static mappings = {
        "/**?"(controller: 'category')

        "500"(view:'/error')
        "404"(view:'/notFound')       
    }
}
like image 67
Jon Cram Avatar answered Oct 02 '22 14:10

Jon Cram