Таким образом, у нас есть f:event:
<f:metadata>
<f:event type="preRenderView" listener="#{dashboardBacking.loadProjectListFromDB}"/>
</f:metadata>
Который инициирован, как желаемый на начальной загрузке страницы (рендеринг).
Однако это preRenderView событие также инициировано ajax частичным рендерингом страницы, который повторно представляет h:panelgroup с идентификатором projectListing, как ниже.
<h:commandButton action="#{mrBean.addProject}" value="Create Project"
title="Start a new project">
<f:ajax render="projectListing" />
</h:commandButton>
Я только хочу, чтобы dashboardBacking.loadProjectListFromDB был назван для начального рендеринга страницы, но не, когда существует ajax частичный рендеринг. Существует ли более соответствующее событие или метод, который я мог использовать?
Другим вариантом было бы поместить вашу функциональность preRenderView
в @PostConstruct
метод ViewScoped
управляемого боба. Эта логика будет выполняться при инициализации боба, и вы сохраните один и тот же экземпляр боба для всех ваших ajax-запросов до тех пор, пока не измените представление.
Вы можете попробовать прикрепить прослушиватель событий preRenderView к отдельному компоненту, а не к странице. Выберите компонент, который не отображается во время запроса Ajax.