По сути, я хочу иметь возможность назначать объекты, созданные в фильтрах, элементам в базовом контроллере, из которого выходит каждый контроллер.Любой возможный способ сделать это?
Вот как я пытался, но не заставил его работать.
Я пытаюсь добиться того, чтобы все мои контроллеры расширили базуконтроллер.Конструктор базового контроллера будет использоваться для присвоения значений его элементам, которые извлекаются из карты session .Пример ниже.
Файл grails-app / controllers / HomeController.groovy:
class HomeController extends BaseController {
def index = {
render username
}
}
Файл grails-app / controllers / BaseController.groovy:
abstract class BaseController {
public String username
public BaseController() {
username = session.username
}
}
Когдапри запуске приложения выводится следующее:
2010-06-15 18:17:16,671 [main] ERROR [localhost].[/webapp] - Exception sending context initialized event to listener instance of class org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: Unable to locate constructor with Class parameter for class org.codehaus.groovy.grails.commons.DefaultGrailsControllerClass
...
Caused by: java.lang.RuntimeException: Unable to locate constructor with Class parameter for class org.codehaus.groovy.grails.commons.DefaultGrailsControllerClass
...
Caused by: java.lang.reflect.InvocationTargetException
...
Caused by: org.codehaus.groovy.grails.exceptions.NewInstanceCreationException: Could not create a new instance of class [com.my.package.controller.HomeController]!
...
Caused by: groovy.lang.MissingPropertyException: No such property: session for class: com.my.package.controller.HomeController
at com.my.package.controller.BaseController.<init>(BaseController.groovy:16)
at com.my.package.controller.HomeController.<init>(HomeController.groovy)
...
2010-06-15 18:17:16,687 [main] ERROR core.StandardContext - Error listenerStart
2010-06-15 18:17:16,687 [main] ERROR core.StandardContext - Context [/webapp] startup failed due to previous errors
И приложение не запускается.
Это всего лишь пример, так как в моем случае я не хотел бы назначать имя пользователяк строковому значению, а скорее к нескольким объектам, извлеченным из карты session .Объекты, извлеченные из карты сеанс , устанавливаются внутри фильтров.
Альтернатива, которую я вижу, заключается в возможности доступа к экземпляру контроллера во время выполнения фильтра.Это возможно?
Пожалуйста, помогите!Спасибо большое!