Используйте grailsApplication инъекцию внутри UrlMappings - PullRequest
3 голосов
/ 17 декабря 2011

Почему-то я получаю огромный список ошибок при использовании следующего кода:

class UrlMappings {
    static grailsApplication
    static mappings = {

    grailsApplication.controllerClasses.each { controllerClass -> // FAILS!
        println(controllerClass.name)
    }

    "/$controller/$action?/$id?"{}

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

Ошибки: http://pastebin.com/tiEsENie


Где следующий код работает нормально и печатает все имена контроллеров:

class UrlMappings {
    static grailsApplication
static mappings = {

    "/$controller/$action?/$id?"{
        grailsApplication.controllerClasses.each { controllerClass -> // WORKS!
            println(controllerClass.name)
        }
    }

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

Разве невозможно получить доступ к статическому grailsApplication изнутри static mappings?

(мне нужно иметь возможность получать имена контроллеров, чтобы динамически создавать URL-адреса)

1 Ответ

2 голосов
/ 17 декабря 2011

Пока ApplicationHolder все еще работает, в документации Grails об этом говорится в комментариях по устареванию


устарело: Использовать внедрение зависимостей или реализовывать GrailsApplicationAware вместо


Поскольку grailsUrlMappingsHolderBean реализует GrailsApplicationAware, я обнаружил, что приведенный ниже код работает и в 2.0

class UrlMappings {
    static mappings = {        
        getGrailsApplication().controllerClasses.each{ controllerClass -> 
            if(controllerClass.name./*your logic here*/){
                "/mod/action" {
                    controller = "${controllerClass.name}"
                }
            }
        }
    }
}
...