【问题标题】:Primefaces LazyLoading Table Select First Row by DefaultPrimefaces LazyLoading Table 默认选择第一行
【发布时间】:2013-05-12 12:08:51
【问题描述】:

在页面刷新、加载、排序、分页时需要有关选择 primefaces 数据表第一行的正确方法的帮助

    <p:dataTable id="clientTable" widgetVar="clientTableVar"
                var="client"
                value="#{maintenanceAccountController.clientLazyDataModel}"
                paginator="true" rows="10"
                paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink}  {PageLinks} {NextPageLink} {LastPageLink} {CurrentPageReport}"
                rowsPerPageTemplate="5,10,20" paginatorPosition="bottom"
                pageLinks="5" lazy="true" sortBy="#{client.cclnCode}"
                sortOrder="descending"
                selection="#{maintenanceAccountController.selectedClient}"
                selectionMode="single" filterDelay="500">

                <p:column id="cclnCodeColumn" headerText="Client Code"
                    sortBy="#{client.cclnCode}" filterBy="#{client.cclnCode}"
                    filterMaxLength="10">
                    <h:outputText value="#{client.cclnCode}" />

                    <f:event listener="#{maintenanceAccountController.saveAccount}"
                        type="preRenderView"></f:event>
                </p:column>

                <p:column id="cclnNamenColumn" headerText="Client Name"
                    sortBy="#{client.cclnName}" filterBy="#{client.cclnName}"
                    filterMaxLength="50">
                    <h:outputText value="#{client.cclnName}" />
                </p:column>

            </p:dataTable>

我目前通过在我的托管 bean 中使用这个 sn-p 来解决这个问题,它实际上选择并突出显示该行。

之所以起作用,是因为在页面刷新时选中的客户端为空,而分页、排序和过滤自动将选中的客户端设置为空。所以当表试图找到选定的客户端时,如果逻辑被执行,我可以选择表的第一行。

但我只是将我的 getter 设置为 setter,并且所选行不会触发行选择事件(将在另一个问题中提出该问题)。

    public MaintenanceAccountClient getSelectedClient()
{
    if (selectedClient == null)
    {
        int count = clientLazyDataModel.getRowCount();
        int index = clientLazyDataModel.getRowIndex();

        if (index < 0 && count > 0)
        {
            clientLazyDataModel.setRowIndex(0);
            selectedClient = clientLazyDataModel.getRowData();
        }
    }

    return selectedClient;
}

请注意,我使用的是 LazyDataModel,因此如果我没记错的话,客户端列表只会在 RenderPhase 加载。

我真的需要一些帮助。示例代码将不胜感激。


PrimeFaces 3.5 JSF 2.1

【问题讨论】:

  • 您想始终选择表格的第一行吗?使用 Primefaces 数据表的客户端 api。它有一个名为selectRow(r, silent) 的javascript 函数。对于数据表事件page sortfilter,您可以使用jquery 的on() 函数将此函数附加到数据表。
  • hH 感谢您的提示,但上面的问题是对我的问题的简化。我还想根据数据库值设置选定的属性。所以我真的在寻找一种在 primefaces 惰性数据表中正确设置值的有问题的方法。

标签: java jsf web primefaces


【解决方案1】:

我也面临同样的问题。我必须在每个页面选择上选择第一行。我的解决方案很简单

 <p:ajax event="rowSelect" listener="#{protoCnt.setAdditionDetail()}" update=":rightTabForm"/>
 <p:ajax event="page" oncomplete="myTblWidget.selectRow(0);"/>

我有两个事件,因此由于 myTblWidget.selectRow(0); 页面选择事件 =“page” 调用; rowSelect 监听器调用 setAdditionDetail()

    public void setAdditionDetail() {   
    if (selected== null) {
        selected= myLazyModelList.get(0);
    } 
}

所以它在 bean 和客户端选择行

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2021-03-21
    相关资源
    最近更新 更多