2011-12-17 2 views
3

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

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') 
} 
} 

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

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

+0

не использует '$ controller', что вы хотите? Зачем вам нужно циклически перебирать контроллеры и печатать их в сопоставлениях? – omarello

+0

Также возможно дублировать? [http://stackoverflow.com/questions/4232884/dynamic-grails-url-mapping-config](http://stackoverflow.com/questions/4232884/dynamic-grails-url-mapping-config) – omarello

+1

, потому что я хочу разбить все ModeratorControllers на/mod/action –

ответ

2

Хотя 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}" 
       } 
      } 
     } 
    } 
} 
+2

это вызывает проблему с моими интеграционными тестами, которые больше не работают. Может быть, это связано с тем, что мы вызываем нестатические вещи из статической среды? –

+0

Прерывает мои интеграционные тесты. Работаем, обертывая if (Environment.current! = Environment.TEST) {..} – rlovtang

+0

спасибо за обходной путь – fabiangebert

Смежные вопросы