2015-06-09 7 views
0

Для проекта мы переносим некоторые Java-приложения в WebSphere 8.5. В процессе мы пытаемся избавиться от некоторых устаревших фреймворков. Один из них - shale (apache attic). Единственным компонентом из сланца, который используется, является контроллер представления для создания экземпляра управляемого jsf обработанных запросов для каждой страницы. У каждого компонента есть метод init, который вызывается при загрузке страницы. Я хотел бы использовать @PostConstruct для этого метода. Единственная проблема, с которой я столкнулся, когда экземпляр компонента создается, когда вызывается метод в bean-компоненте. К сожалению, компонент не всегда вызывается, и метод init действительно заполняет данные в компоненте, включенном в сеанс. Существует соглашение об именах, которое связывает страницы и компоненты, чтобы мы могли использовать прослушиватель для создания экземпляра компонента на основе запроса. Другое решение может изменить сферу действия на viewcope (возможно, на большой сложности в websphere 8.5).Как создать экземпляр бэкбона на загрузке страницы

Мне было интересно, есть ли что-то, что я могу сделать, чтобы сделать работу PostConstruct? И есть ли другие варианты, которые мне не хватает?

Редактировать: У меня есть PhaseListener, который выполняет базовую функциональность. Он соответствует запрошенной странице соответствующему компоненту (по соглашению об именах). Для создания экземпляра компонента используется следующее: он выглядит немного уродливым.

expressionFactory.createValueExpression(elContext, "#{" + managedBeanName + "}", Object.class) 

Есть ли более элегантный способ сделать это?

+0

Какие JSF 2.x версии? WAS 8.5 MyFaces 2.0.x? – BalusC

+0

Предпочтительно, чтобы изменение реализации повлекло за собой изменение порядка загрузчика класса (родительский последний). Я не думаю, что это вариант для нас. – pjanssen

+0

Я этого не спрашивал. Я спросил, какую версию JSF 2.x вы используете. Тогда я могу настроить свой ответ на этот вопрос. Возможности зависят от используемой версии JSF 2.x. Итак, еще раз, используете ли вы JSF 2.0, 2.1 или 2.2? – BalusC

ответ

2

Возможно, вы сможете попробовать <f:event/>?

На ваш взгляд, вы можете добавить это на страницу.

<f:event type="postAddToView" listener="#{backingBean.myInitMethod()"/> 

https://stackoverflow.com/a/14004230/4706826

дает вам информацию о том, когда события получить казнены.

+0

Спасибо, это может быть вариант. Это потребует много работы на ногах, но я буду изучать его. – pjanssen

-2

Помещенный аннотированный метод @PostConstruct в бэк-компоненте. Эта аннотация указывает компоненту выполнять аннотированный метод каждый раз при вызове его конструктора.

Пример:

@ManagedBean 
@ViewScoped 
public class MyManagedBean{ 

    @PostConstruct 
    public void initView() throws Exception{ 
     ...initialize page values, execute database queries, etc. 
    } 
+0

Попробуйте прочитать вопрос сверху донизу, а не только заголовок. – BalusC