【发布时间】:2019-02-25 11:14:54
【问题描述】:
我在包含固定列和动态列的惰性数据表的固定列中遇到 sortBy 问题。这是表格:
<p:dataTable id="table" value="#{formController.lazyModel}" var="record" rowKey="#{record.get(0)}" widgetVar="tableWidget"
lazy="true" selection="#{formController.selectedRecord}" selectionMode="single" style="#{formController.tableStyle} min-width: 120px;"
scrollable="true" scrollHeight="600" scrollWidth="100%" emptyMessage="#{sessionController.itemFormLabels['table_no_entries_msg']}" editable="true"
paginator="true" rows="50" rowsPerPageTemplate="25,50,100" paginatorPosition="bottom" filterDelay="500"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}">
<p:ajax event="rowEdit" listener="#{formController.onRowEdit}" update=":alowAddNewRecord :formTableForm:buttonPanel" />
<p:ajax event="rowEditCancel" onsuccess="cancelEditing();" />
<p:ajax event="page" onstart="blockTableInput();" oncomplete="enbleTableInput();" />
<f:facet name="header">
<p:commandButton id="insertButton" value="#{sessionController.itemFormLabels['add_record_button']}" icon="fa fa-plus"
actionListener="#{formController.insertRecord}" disabled="#{not formController.alowAddNewRecord}"
title="#{sessionController.itemFormLabels['add_record_tip']}" onclick="saveLastRow();PF('tableWidget').clearFilters();"
update=":alowAddNewRecord :formTableForm:table :formTableForm:buttonPanel :growlMessages" />
</f:facet>
<p:column headerText="ID" sortBy="#{record[0]}" filterBy="#{record[0]}" filterMatchMode="contains" exportable="false"
style="width: 50px; font-size: 12px !important;" rendered="#{formController.formColumnList.get(0).visible}">
...
</p:column>
<p:columns var="column" value="#{formController.columnsInfo}" columnIndexVar="colIndex" exportable="false"
sortBy="#{record[column.columnIndex]}" filterBy="#{record[column.columnIndex]}" filterMatchMode="contains"
rendered="#{formController.formColumnList.get(column.columnIndex).visible}"
filterStyle="width: 90%" style="#{formController.columnsCustomStyles.get(column.columnIndex - 1)} font-size: 12px !important;">
...
</p:columns>
<p:column headerText="report header" sortBy="#{record[formController.noColumns + 1]}" exportable="false"
filterBy="#{record[formController.noColumns + 1]}" filterMatchMode="contains" style="width: 50px; font-size: 12px !important;"
rendered="#{formController.tableInfo.tableType eq 1 and formController.formColumnList.get(formController.noColumns + 1).visible}">
...
</p:column>
<p:column headerText="user created" sortBy="#{record[formController.noColumns + formController.factColDelta + 1]}" exportable="false"
filterBy="#{record[formController.noColumns + formController.factColDelta + 1]}" filterMatchMode="contains"
style="width: 100px; font-size: 12px !important;" rendered="#{formController.formColumnList.get(formController.noColumns + formController.factColDelta + 1).visible}">
...
</p:column>
<p:column headerText="date created" sortBy="#{record[formController.noColumns + formController.factColDelta + 2]}" exportable="false"
filterBy="#{record[formController.noColumns + formController.factColDelta + 2]}" filterMatchMode="contains"
style="width: 100px; font-size: 12px !important;" rendered="#{formController.formColumnList.get(formController.noColumns + formController.factColDelta + 2).visible}">
...
</p:column>
<p:column headerText="user modified" sortBy="#{record[formController.noColumns + formController.factColDelta + 3]}" exportable="false"
filterBy="#{record[formController.noColumns + formController.factColDelta + 3]}" filterMatchMode="contains"
style="width: 100px; font-size: 12px !important;" rendered="#{formController.formColumnList.get(formController.noColumns + formController.factColDelta + 3).visible}">
...
</p:column>
<p:column headerText="date modified" sortBy="#{record[formController.noColumns + formController.factColDelta + 4]}" exportable="false"
filterBy="#{record[formController.noColumns + formController.factColDelta + 4]}" filterMatchMode="contains"
style="width: 100px; font-size: 12px !important;" rendered="#{formController.formColumnList.get(formController.noColumns + formController.factColDelta + 4).visible}">
...
</p:column>
<p:column style="width:32px" exportable="false">
<p:rowEditor />
</p:column>
如果我在动态 cloumns 上调用排序,一切都很好。 sortBy 值表达式:#{record[column.columnIndex]} 计算为列索引并且排序正常。
而如果我在固定列上调用排序,比方说第一个,值表达式#{record[0]} 不会计算为列索引 0,而是一个字符串“记录 [0]”。
这可以在调用排序时抛出的 NumberFromatException 中看到:
12:09:52,336 严重 [javax.enterprise.resource.webcontainer.jsf.application](默认任务 1)错误渲染视图 [/public/item_form.xhtml]:java.lang.NumberFormatException:对于输入字符串: “记录[0]” 在 java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
我正在使用 Primefaces 6.2
【问题讨论】:
标签: primefaces