2013-11-26 2 views
1

В приложении JSF 1.2 можно ли переопределить управляемый компонент, обработанный сеансом, с подклассом?переопределение управляемого объекта с подклассом

структура класса

У меня есть контекст сеанса Управляемый компонент, MainViewMB, и его подкласс, RestrictedViewMB:

UML: <<ManagedBean>> MainViewMB extended by RestrictedViewMB

граней-config.xml

<managed-bean> 
    <managed-bean-name>mainViewMB</managed-bean-name> 
    <managed-bean-class>com.example.MainViewMB</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

Постановка задачи

Выражение EL #{mainViewMB} возвращает экземпляр MainViewMB.

Я хотел бы переустановить имя #{mainViewMB} с экземпляром RestrictedViewMB, так что выражение EL #{mainViewMB} возвращает экземпляр подкласса для остальной части сеанса.

Есть ли способ выполнить мою задачу?

Мотивируя пример

MainViewMB обрабатывает GUI логику главной страницы приложения. Когда пользователь вводит приложение со специальной страницы входа в систему, мне нужно предоставить ограниченное упрощенное представление главной страницы. Переопределение некоторых свойств MainViewMB в подклассе кажется очевидным решением.

ответ

2

Сделайте это вручную в тот момент, когда вы можете/должны это сделать.

externalContext.getSessionMap().put("mainViewMB", new RestrictedViewMB()); 

Это ставит новый экземпляр RestrictedViewMB в рамках сеанса с именем mainViewMB, фактически делая это сеанс контекстного управляемым компонент.

Вам нужно только учитывать, что управляемые свойства и @PostConstruct/@PreDestroy не вызываются таким образом, вам также придется делать это вручную.

+0

Будет ли '# {mainViewMB}' работать? Требуется ли какое-либо другое действие для работы с EL? –

+3

Да, иначе этот ответ был бессмыслен. Нет, он полностью отменяет любые существующие сеансовые атрибуты, включая управляемые bean-компоненты JSF. Вы, кстати, понимаете, как JSF создает и управляет бобами? JSF помещает управляемые bean-компоненты с узкоспециализированным сеансом точно так же на карте сеанса с управляемым именем компонента в качестве ключа. Вы здесь просто повторяете работу JSF, но затем с другим экземпляром. – BalusC

+0

Да и нет. Я понимаю, как работает инъекция зависимостей EJB, и я понимаю области применения веб-приложений JSP/Servlet, но мое понимание JSF имеет несколько пробелов. –

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