gpt4 book ai didi

java - Primefaces LazyLoading 表默认选择第一行

转载 作者:行者123 更新时间:2023-12-01 14:34:21 35 4
gpt4 key购买 nike

需要有关在刷新、加载、排序、分页页面时选择 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 中使用此代码片段解决了这个问题,它实际上选择并突出显示了该行。

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

但是我只是将 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.5JSF 2.1

最佳答案

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

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

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

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

因此它选择 bean 和客户端上的行

关于java - Primefaces LazyLoading 表默认选择第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16607083/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com