因此,我们有一个f:event:
<f:metadata> <f:event type="preRenderView" listener="#{dashboardBacking.loadProjectListFromDB}"/> </f:metadata>
在初始页面加载(呈现)时根据需要触发。
但是,此preRenderView事件也由ajax部分页面渲染触发,该渲染将重新渲染ID为projectListing的h:panelgroup,如下所示。
<h:commandButton action="#{mrBean.addProject}" value="Create Project" title="Start a new project"> <f:ajax render="projectListing" /> </h:commandButton>
我只希望为初始页面渲染调用dashboardBacking.loadProjectListFromDB,而不是在存在ajax部分渲染时调用。我可以使用更合适的事件或方法吗?
另一个选择是将您的preRenderView功能放在托管bean 的@PostConstruct方法中ViewScoped。初始化Bean时将执行此逻辑,并且您为所有ajax请求维护相同的Bean实例,直到更改视图为止。
preRenderView
@PostConstruct
ViewScoped