<rowExpansion> evaluated during JSF phases

98 Views Asked by At

I have a datatable using rowExpansion. When the page is loaded, the rowExpansion is not evaluated, which is fine. When the paginator is used to show the next results or if a submission is done - the rowExpansion evaluation is triggered.

Here is a XHTML example :

<h:form>
    <p:dataTable var="data" value="#{bean.dataList}" paginator="true">
        <p:column headerText="Details">
            <p:rowToggler />
        </p:column>
        <p:rowExpansion>
            <h:panelGroup rendered="#{not empty data.detail}">
                <ui:include src="dataDetail.xhtml" />
            </h:panelGroup>
        </p:rowExpansion>
    </p:dataTable>
    <h:commandLink id="addData" value="Add data" action="#{bean.addData}" />
</h:form>

I've profiled this flow using visualVM, and used the debugger, to discover that the data.getDetail() method was called during the following JSF phases : (ApplyRequestValuesPhase, ProcessValidationsPhase, UpdateModelValuesPhase), when the paginator was used.

I've come to the deduction that the rowExpansion is part of the view, and is evaluated as a normal component.

Would you mind telling me if it is the expected behaviour for rowExpansion ?

Is there a correct way to prevent the evaluation of the rowExpansion content when using the paginator ?

Thanks for your answers.

NB : I'm using PrimeFaces 5.2.

0

There are 0 best solutions below