Grails: как изменить расположение просмотра по умолчанию?

У меня есть контроллер AdminTagController. По умолчанию вид будет находиться в папке /adminTag. Можно ли изменить папку по умолчанию для этого контроллера на /admin/view? Я могу указать представление для каждого метода, но это не круто

Спасибо


person fedor.belov    schedule 29.05.2013    source источник


Ответы (2)


Его можно изменить с помощью afterInterceptor вашего контроллера. Посмотрите на пример:

def afterInterceptor = { model, modelAndView ->
    println "Current view is ${modelAndView.viewName}"
    if (model.someVar) {
        modelAndView.viewName = "/mycontroller/someotherview"
    }
    println "View is now ${modelAndView.viewName}"
}

Это применимо ко всем действиям вашего контроллера.

person Community    schedule 29.05.2013
comment
хороший ответ, я обычно стараюсь избегать перехватчиков ... +1 - person rimero; 30.05.2013

В вашем случае я бы проделал тяжелую работу в контроллере, поскольку это влияет только на один класс.

Однако есть другой способ - использовать пользовательский GroovyPageResourceLoader.

Этот подход обычно используется, когда ваши представления находятся в структуре папок, которая не соответствует соглашениям Grails. В вашем случае, на мой взгляд, это было бы излишним.

Однако вот общая идея:

1. Создайте класс, расширяющий GroovyPageResourceLoader по умолчанию.

Ниже приведен очень сырой пример.

class AdminGroovyPageResourceLoader extends GroovyPageResourceLoader {

 @Override Resource getResource(java.lang.String location) {
        if (location.contains ("/admin")) {
            return new FileSystemResource("PATH_TO_GSP_LOCATION_WITHOUT_FILE_EXTENSION")
        }

        return super.getResource(location)
 }
}

2. Переопределить bean-компонент groovyPageResourceLoader по умолчанию

В resources.groovy или дескрипторе вашего подключаемого модуля переопределите bean-компонент groovyPageResourceLoader своим пользовательским классом.

Более короткий путь, может быть какой-нибудь метакласс кунг-фу, если вы не не хочу отменять Spring Bean по умолчанию.

person rimero    schedule 29.05.2013