2015-11-10 5 views
0

В настоящее время я взламываю проект, где базовый класс расширен множеством компонентов.Получить область @ManagedBean в JSF

Существует общий метод для этого базового класса, и в основном единственное изменение, которое мне нужно сделать, это проверить, не происходит ли при вызове конкретного вызова текущий экземпляр, вызывающий этот метод, - это компонент с областью приложения. Если это так, мне просто нужно зарегистрировать сообщение об ошибке и вернуть кешированный ответ; Если это не так, я должен создать исключение.

Appart from using instanceof на каждом объекте, охватывающем бобы, распространяя этот базовый класс, есть ли способ узнать, является ли объект this компонентом, включенным в приложение?

+1

Если бит хранится в 'ServletContext', то это область приложения, в противном случае это не так. –

+0

Возможно, вам необходимо четко определить свой сценарий - CDI обеспечивает надежный механизм поиска метаданных компонентов; или вы могли бы просто выполнить контекстный поиск, например, @LuiggiMendoza рекомендует - зависит от вашего сценария и того, как «чистый» вы хотите, чтобы он выглядел – kolossus

ответ

0

Вы можете проверить, имеет ли класс какого-либо экземпляра конкретные аннотации. Например, звонок:

Annotation[] annotations = this.getClass().getAnnotations(); 

предоставит вам все аннотации текущего экземпляра. Или вы можете выяснить некоторую определенную аннотацию:

ApplicationScoped annotation = this.getClass().getAnnotation(ApplicationScoped.class); 

, которая будет возвращать null если класс не помечается @ApplicationScoped

В случае наследования, метод возвращает getAnnotations() аннотации родительского класса тоже и аннотированный классом @RequestScoped, также возвращает @ApplicationScoped, если его родитель был объявлен так. С другой стороны, JSF-управляемые beans будут переопределять область родителя.

Надеюсь, это вам поможет.