Tôi tự hỏi liệu có thể quan sát sự kiện CDI với nhiều bean sao lưu có phiên JSF 2.0 hay không. Tôi nghĩ rằng tôi có thể đẩy sự kiện/dữ liệu đến nhiều phiên bằng cách quan sát sự kiện.Các sự kiện CDI quan sát được trên các hạt sao lưu JSF có lớp phiên
Tôi đã thiết lập một thử nghiệm nhỏ cho phép người dùng kích hoạt sự kiện bằng cách sử dụng nút trên trang (được gắn với phương thức trong bean sao lưu được kích hoạt phiên thực sự kích hoạt sự kiện). Tôi nghĩ rằng nếu tôi mở hai trình duyệt khác nhau, hai phiên sẽ được tạo và sự kiện này sẽ thông báo cho từng hạt đậu sao lưu.
Tuy nhiên, khi chạy thử nghiệm nhỏ và nhấp vào nút để kích hoạt sự kiện trên một trong các trình duyệt, tôi thấy rằng sự kiện chỉ thông báo cho một trong các phiên phạm vi đậu. Nó chỉ thông báo cho bean mà từ đó sự kiện đã được kích hoạt (nghĩa là - nếu tôi nhấp vào nút trong trình duyệt 1 thì phiên đậu được sao chép phiên trong trình duyệt 1 sẽ được thông báo, và nếu tôi nhấp vào nút trong trình duyệt 2, bean sẽ sao lưu phiên trình duyệt 2 được thông báo).
Tôi đã ấn tượng rằng các sự kiện sẽ thông báo cho tất cả các phiên bản bean. Tuy nhiên, điều này dường như không đúng. Tôi có thể làm được điều này không? Tôi chỉ có một cái gì đó thiết lập sai?
CẬP NHẬT để hiển thị những gì mã của tôi trông giống như:
Một đoạn jsfpage.xhtml để bắn một sự kiện và hiển thị dữ liệu phiên scoped:
<h:form> <h:outputText value="#{BackingBean.property}" /> <p:commandButton value="Fire Event" action="#{EventFirer.fireEvent}" /> </h:form>
Session đậu có vỏ bọc nhận sự kiện:
@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(); } }
Đơn scoped đậu kích hoạt sự kiện:
@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; } }
Bạn nên thêm mã của mình, Thuyền trưởng. –
Bạn đã bao giờ tìm thấy giải pháp chưa? Tôi đang cố gắng làm như vậy và muốn đẩy dữ liệu đến tất cả các hạt '@ SessionScoped' của tôi. – Reitffunk