Вы, кажется, думаете, что preRenderView
выполняется только один раз при создании области представления.Это неправильно.Тот Самый preRenderView
выполняется во время каждый HTTP-запрос непосредственно перед рендерингом представления (прочтите название события еще раз, теперь оно должно иметь больше смысла, не так ли?).Разбивка на страницы и сортировка выполняются с помощью ajax.Каждый ajax-запрос также считается HTTP-запросом.Время жизни данных в области Flash составляет ровно одно перенаправление.Данные в области Flash больше не доступны при всех последующих запросах, если только они явно не заданы в области flasch еще раз.Таким образом, по сути, ваш метод прослушивания повторно вызывается при каждом запросе разбивки на страницы и сортировки, который эффективно устанавливает detalle
Для null
.
Избавьтесь от <f:event>
в целом и поставить @PostConstruct
аннотация к методу.Таким образом, он действительно вызывается только один раз во время создания области просмотра, именно так, как вы и предполагали.
@PostConstruct
public void cargarDatos() {
detalle = (List<Map<String, Object>>) FacesUtils.flashScope().get("RIE_detalle");
}
Смотрите также:
Не связанный что касается конкретной проблемы, то эта конструкция такова...немного странно.Я бы действительно проконсультировался с более опытным архитектором JSF о том, как правильно выполнить конкретное функциональное требование, для которого вы, возможно, ошибочно полагали, что использование области flash таким образом было бы правильным подходом.