Mi chiedo se sia possibile osservare un evento CDI con più bean di supporto con scope sessione JSF 2.0. Ho pensato di poter spingere eventi/dati a più sessioni osservando l'evento.Eventi CDI osservati attraverso bean di supporto JSF con scope di sessione
Ho impostato un test di piccole dimensioni che consente all'utente di attivare l'evento utilizzando un pulsante sulla pagina (che è collegato a un metodo nel bean di supporto dell'ambito della sessione che genera effettivamente l'evento). Ho pensato che se avessi aperto due browser diversi, sarebbero state create due sessioni e l'evento avrebbe notificato ciascuno dei bean di supporto dell'ambito della sessione.
Tuttavia, quando si esegue il mio piccolo test e si fa clic sul pulsante per attivare l'evento su uno dei browser, vedo che l'evento notifica solo uno dei bean con scope di sessione. Notifica solo il bean da cui è stato attivato l'evento (ad esempio, se faccio clic sul pulsante nel browser 1 viene notificato il bean con scope della sessione che supporta la sessione nel browser 1 e se faccio clic sul pulsante nel browser 2 il bean esegue il backup della sessione in browser 2 viene notificato).
Ho avuto l'impressione che gli eventi avrebbero notificato tutte le istanze di bean. Tuttavia, questo non sembra essere il caso. Dovrei essere in grado di farlo? Ho appena installato qualcosa di sbagliato?
UPDATE per mostrare ciò che il mio codice è simile:
un frammento di jsfpage.xhtml a fuoco un evento e mostrare i dati di sessione con ambito:
<h:form> <h:outputText value="#{BackingBean.property}" /> <p:commandButton value="Fire Event" action="#{EventFirer.fireEvent}" /> </h:form>
La Sessione fagiolo -scoped che riceve l'evento:
@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(); } }
Un'applicazione ambito fagiolo per generare l'evento:
@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; } }
È necessario aggiungere il codice, Capitano. –
Hai mai trovato una soluzione? Sto cercando di fare lo stesso e voglio inviare dati a tutti i miei fagioli '@ SessionScoped'. – Reitffunk