DataTable RowExpansion延迟加载

时间:2014-04-08 15:06:19

标签: jsf primefaces jsf-2.2

我目前正在尝试实现延迟加载行扩展。 我在rowExpansion中添加了一个dataGrid,其value属性是一个从数据库中获取详细用户的方法。

当我调试此方法(userBacking.getDetailedUserById(Long userId))时,我发现当我点击一行时,此方法最少被调用5次。 有谁知道为什么这种方法被调用了这么多次? 有没有更好的方法来实现延迟加载行扩展?

<p:dataTable id="myPassengerTable"
                    value="#{userBacking.userTableData}" var="user"
                    selection="#{myRoutesBacking.selectedUser}"
                    selectionMode="single"
                    emptyMessage="no users">

                    <p:ajax event="rowSelect" listener="#{userBacking.onRowSelect}" />

                    <p:ajax event="rowUnselect"
                        listener="#{userBacking.onRowUnselect}" />

                    <p:column styleClass="expand#{user.id}"
                        style="display:none;">
                        <p:rowToggler />
                    </p:column>

                    <p:column >
                        <h:outputText
                            value="#{user.username}" />
                    </p:column>
                    <p:rowExpansion>
                        <p:dataGrid var="detailedUser"
                            value="#{userBacking.getDetailedUserById(user.Id)}"
                            columns="1" rows="1">
                            <p:panelGrid>
                                <p:row>
                                    <p:column>#{detailedUser.firstName} #{detailedUser.lastName}</p:column>
                                </p:row>
                            </p:panelGrid>
                        </p:dataGrid>
                    </p:rowExpansion>
                </p:dataTable>

1 个答案:

答案 0 :(得分:1)

当前(PrimeFaces 6+)p:rowToggler使用Ajax加载,因此默认情况下是惰性的。阅读p:rowExpansion gets rendered even though it's not toggled后,似乎并非总是如此(直到PrimeFaces 5)。因此,如果可能的话,只需升级即可。

对于多个吸气剂调用,如前所述,应检查:Why JSF calls getters multiple times