Từ những gì tôi hiểu, các đối tượng được đặt bên trong phạm vi Flash trong vòng đời yêu cầu khuôn mặt sẽ có sẵn cho vòng đời yêu cầu khuôn mặt tiếp theo và sau đó xóa.Hiểu phạm vi flash trong JSF2
Giả sử tôi có hai trang:
page01.xhtml:
<h:form>
<h:commandButton action="#{page01Bean.action}" />
</h:form>
Page01Bean:
@ManagedBean
@RequestScoped
public class Page01Bean {
public void action(){
FacesContext.getCurrentInstance().getExternalContext().getFlash().put("fooKey", "fooValue");
}
}
page02.xhtml:
<h:outputText value="#{flash.fooKey}"/>
Vì vậy, khi các nút trong page01.xhtml
được nhấp, một khuôn mặt yêu cầu vòng đời (nói vòng đời A) bắt đầu và thiết lập giá trị để flash dưới phím gọi fooKey
Sau đó, tôi mở tab trình duyệt khác và duyệt page02.xhtml
. Một khuôn mặt yêu cầu vòng đời (nói vòng đời B) bắt đầu để render trang này. Tôi hy vọng rằng vòng đời B có thể truy cập phạm vi đèn flash của vòng đời trước đó (tức là vòng đời A) và hiển thị fooValue
trong page02.xhtml
. Tuy nhiên, nó không hiển thị gì cả.
Vui lòng sửa tôi những gì tôi hiểu sai về phạm vi flash trong ví dụ này. Cảm ơn rất nhiều
+1 đề cập đến việc thực hiện buggy, nó bối rối địa ngục ra khỏi tôi. – mabi
Đặt nó qua EL đã không làm các trick cho tôi, nhưng thay vào đó, tôi có thể đề nghị để đặt nó vào một bean được quản lý: 'FacesContext.getCurrentInstance(). GetExternalContext(). GetFlash(). Keep (" oValue "); \t \t this.oValue = (ValueClass) FacesContext.getCurrentInstance(). GetExternalContext(). GetFlash(). Get ("oValue"); ' Nó hoạt động để' TẢI lại trang một lần nữa, nhưng nó sẽ phá vỡ bằng cách nào đó sau ajax request + 'GET'. – DanielK