Sie scheinen zu denken, dass die preRenderView
wird nur einmal während der Erstellung des View -Bereichs ausgeführt. Das ist falsch. Das preRenderView
wird während jeder HTTP -Anfrage kurz vor der Ansicht (lesen Sie den Ereignisnamen noch einmal, es sollte jetzt sinnvoller sein, oder?). Pagination und Sortierung werden von Ajax durchgeführt. Jede AJAX -Anfrage wird auch als HTTP -Anfrage angesehen. Flash Scoped -Daten haben eine Lebensdauer von genau einer Umleitung. In allen nachfolgenden Anfragen sind Flaschanfragen nicht mehr verfügbar, es sei denn, es wird nicht mehr ausdrücklich im Flaschbereich eingestellt. Im Grunde genommen wird Ihre Hörermethode bei jeder Pagination und Sortieranforderung neu gestaltet, die effektiv festgelegt werden detalle
zu null
.
Loswerden <f:event>
insgesamt und setzen a @PostConstruct
Annotation zur Methode. Auf diese Weise wird es nur einmal während der Erstellung des View -Umfangs angerufen, genau wie Sie es beabsichtigt haben.
@PostConstruct
public void cargarDatos() {
detalle = (List<Map<String, Object>>) FacesUtils.flashScope().get("RIE_detalle");
}
Siehe auch:
Nicht verwandt Für das konkrete Problem ist dieses Design ... irgendwie seltsam. Ich würde wirklich einen erfahreneren JSF -Architekten konsultieren, wie Sie die konkrete funktionale Anforderung ordnungsgemäß erreichen können, für die Sie möglicherweise fälschlicherweise dachten, dass die Verwendung des Flash -Bereichs auf diese Weise der richtige Ansatz wäre.