Java 默认情况下,加载表选择第一行

Java 默认情况下,加载表选择第一行,java,jsf,web,primefaces,Java,Jsf,Web,Primefaces,当页面刷新、加载、排序和分页时,需要有关选择primefaces数据表第一行的正确方法的帮助吗 <p:dataTable id="clientTable" widgetVar="clientTableVar" var="client" value="#{maintenanceAccountController.clientLazyDataModel}" paginator="true"

当页面刷新、加载、排序和分页时,需要有关选择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中使用这个片段来解决这个问题,它实际上选择并高亮显示行

它之所以有效,是因为刷新页面时所选客户端为null,而分页、排序和筛选会自动将所选客户端设置为null。因此,当表尝试查找所选客户机时,执行if逻辑,我可以选择表的第一行

但我只是将getter设置为setter,所选行不会触发row selected事件(将在另一个问题中询问该问题)

public MaintenanceAccountClient getSelectedClient()
{
if(selectedClient==null)
{
int count=clientLazyDataModel.getRowCount();
int index=clientLazyDataModel.getRowIndex();
如果(索引<0&&count>0)
{
clientLazyDataModel.setRowIndex(0);
selectedClient=clientLazyDataModel.getRowData();
}
}
返回selectedClient;
}
请注意,我使用的是LazyDataModel,因此只有在我没有弄错的情况下,才会在RenderPase中加载客户机列表

我真的需要一些帮助。示例代码将非常感谢


PrimeFaces 3.5
JSF2.1我也面临同样的问题。我必须选择每页的第一行。我的解决办法很简单



是否始终选择表的第一行?使用Primefaces数据表的客户端api。它有一个名为
selectRow(r,silent)
的javascript函数。您可以使用jquery的
on()
函数将此函数附加到datatable上,该函数用于datatable事件
页面
排序
筛选
。hH谢谢您的提示,但上面的问题只是简化了我的问题。我还想根据数据库值设置所选属性。所以我真的在寻找一种有问题的方法来正确设置primefaces惰性数据表中的值。
    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;
}