Мне интересно, можно ли наблюдать событие CDI с несколькими поддерживающими бэкэндом JSF 2.0. Я подумал, что могу передать события/данные на несколько сеансов, наблюдая за событием.Происходит ли событие CDI во всех поддерживаемых боковых компонентах JSF в сессионном режиме
Я установил небольшой тест, который позволяет пользователю запускать событие с помощью кнопки на странице (которая привязана к методу в компоненте, поддерживающем сеанс, который фактически запускает событие). Я думал, что если я открою два разных браузера, будут созданы две сессии, и событие будет уведомлять каждую из сторонних бэкэндов.
Однако при запуске моего маленького теста и нажатии кнопки, чтобы запустить событие в одном из браузеров, я вижу, что событие только уведомляет одну из фаз, охваченных сеансом. Он уведомляет только о компоненте, из которого было вызвано событие (т. Е. Если я нажму кнопку в браузере 1, будет активирован сеансовый компонент, поддерживающий сеанс в браузере 1, и если я нажму кнопку в браузере 2, компонент, поддерживающий сеанс в браузер 2 уведомляется).
У меня создалось впечатление, что события будут уведомлять все экземпляры bean. Однако, похоже, это не так. Должен ли я это сделать? У меня что-то неправильно настроено?
UPDATE, чтобы показать, что мой код выглядит следующим образом:
фрагмент jsfpage.xhtml стрелять событие и показать контекст сеанса данные:
<h:form> <h:outputText value="#{BackingBean.property}" /> <p:commandButton value="Fire Event" action="#{EventFirer.fireEvent}" /> </h:form>
Сессия , который принимает событие:
@Named @SessionScoped public class BackingBean implements Serializable { private String property; public String getProperty() { return property } public void listenForChange(@Observes EventObj event) { logger.log(Level.INFO, "Event received"); property = event.toString(); } }
Применение области действия боб активаций события:
@Named @ApplicationScoped public class EventFirer implements Serializable { @Inject private Event events; public String fireEvent() { logger.log(Level.INFO, "Event fired"); events.fire(new EventObj()); return null; } }
Вы должны добавить свой код, капитан. –
Вы когда-нибудь находили решение? Я пытаюсь сделать то же самое и хочу переместить данные во все мои '@ SessionScoped' beans. – Reitffunk