我有一个带有动态列的dataTable,列重新排序和一个columnToggler来控制当前可见的列。它看起来像这样:
<p:dataTable id="dashboard-edition-table" widgetVar="dashboardEditTableWidget" value="#{dashboardEditionBean.selectedDashboard.deviceMocks}" var="deviceMock"
draggableColumns="true">
<p:ajax event="colReorder" listener="#{dashboardEditionBean.onReorder}" />
<f:facet name="header">
#{dashboardEditionBean.selectedDashboard.name}
<p:commandButton id="toggler" type="button" value="Columns" style="float:right" icon="ui-icon-calculator" />
<p:columnToggler datasource="dashboard-edition-table" trigger="toggler">
<p:ajax event="toggle" listener="#{dashboardEditionBean.onToggle}" />
</p:columnToggler>
<br />
</f:facet>
<p:columns value="#{dashboardEditionBean.columns}" var="column" columnIndexVar="colIndex" sortBy="#{deviceMock[column.property]}" filterBy="#{deviceMock[column.property]}"
visible="#{column.visible}">
<f:facet name="header">
<h:outputText value="#{column.header}" />
</f:facet>
<h:outputText value="#{deviceMock[column.property]}" />
</p:columns>
</p:dataTable>
正如您所见,我有听众重新排序和切换事件。在这些监听器中,我试图访问dataTable并打印所有列。
public void onReorder(AjaxBehaviorEvent event) {
DataTable table = (DataTable) event.getSource();
System.out.println("REORDER");
for (UIColumn column : table.getColumns()) {
System.out.println("key: " + column.getColumnKey() + ", field:" + column.getField() + ", headerText: "
+ column.getHeaderText() + ", visible: " + column.isVisible());
}
}
我不明白为什么我在控制台中获得此输出:
key: dashboard-edition-form:dashboard-edition-table:j_idt87:3, field:null, headerText: null, visible: false
key: dashboard-edition-form:dashboard-edition-table:j_idt87:4, field:null, headerText: null, visible: false
key: dashboard-edition-form:dashboard-edition-table:j_idt87:5, field:null, headerText: null, visible: false
key: dashboard-edition-form:dashboard-edition-table:j_idt87:6, field:null, headerText: null, visible: false
key: dashboard-edition-form:dashboard-edition-table:j_idt87:7, field:null, headerText: null, visible: false
正如您在支持bean列中看到的那样,空标题和可见性设置为false DESPITE,它们在视图中正确呈现(每列都有一个正确的标题并且可见)。 为什么会这样?我真的很感激这个问题的答案。