Você parece pensar que o preRenderView
é executado apenas uma vez durante a criação do escopo da visão. Isto está errado. o preRenderView
é executado durante todo Solicitação HTTP logo antes de renderizar a visualização (leia o nome do evento mais uma vez, agora deve fazer mais sentido, certo?). A paginação e a classificação são realizadas pelo Ajax. Cada solicitação AJAX também é considerada uma solicitação HTTP. Os dados com escopo flash têm uma vida útil de exatamente um redirecionamento. Os dados com escopo flash não estão mais disponíveis em todas as solicitações subsequentes, a menos que seja explicitamente definido no escopo de Flasch mais uma vez. Então, basicamente, seu método do ouvinte é reinvocado em todas as solicitações de paginação e classificação que efetivamente definem detalle
para null
.
Livre -se do <f:event>
no total e colocar um @PostConstruct
anotação no método. Dessa forma, é realmente invocado apenas uma vez durante a criação do escopo da visão, exatamente como você pretendia.
@PostConstruct
public void cargarDatos() {
detalle = (List<Map<String, Object>>) FacesUtils.flashScope().get("RIE_detalle");
}
Veja também:
Não relacionado Para o problema concreto, esse design é ... meio estranho. Eu realmente consultaria um arquiteto JSF mais experiente sobre como alcançar adequadamente o requisito funcional concreto para o qual você possivelmente pensou incorretamente que o uso do escopo do flash dessa maneira seria a abordagem correta.