数据表RowExpansion延迟加载

问题描述 投票:1回答:1

我目前正在执行一个延迟加载行扩张。我加了一个DataGrid在我rowExpansion其价值属性是它会从数据库的详细用户的方法。

当我调试这个方法(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>
jsf primefaces jsf-2.2
1个回答
1
投票

目前(PrimeFaces 6+)p:rowToggler使用Ajax加载,所以它的默认懒。阅读p:rowExpansion gets rendered even though it's not toggled后,似乎这并非总是如此(最多PrimeFaces 5)。因此,如果可能的话,只是升级。

而对于多个吸气叫你应该,因为已经指出,检查:Why JSF calls getters multiple times

© www.soinside.com 2019 - 2024. All rights reserved.