В моих мачтах xhtml-view У меня есть таблица данных fontfaces, где я скрываю и показываю столбцы динамически с помощью самодельного столбца Toggler-composite.Как программно изменить визуализированный атрибут столбца p: в p: dataTable
Моей первая РЕАЛИЗАЦИЯ работает отлично и использует явные оказываемые-атрибуты для всех настраиваемых столбцов, которые связаны с ServerSide columModel ...
<p:dataTable id="myDataTable" ...>
<p:column rendered="#{bean.myColumnModel.isVisible('A Column name')}" >
...
</p:column>
<!-- many other columns -->
</p:dataTable>
<my:columnToggler columnModel="#{bean.myColumnModel}" for="myDataTable" />
Я хочу, чтобы избавиться от этих оказываемых-атрибутов, потому что я уже знаете, какие столбцы настраиваются. Вот как изменить DataTable во время выполнения:
private void renderColumnsInDataTable() {
List columns = dataTable.getColumns();
for (Iterator<Column> iterator = columns.iterator(); iterator.hasNext();) {
...
if (isColumnConfigurable(columnName)) {
column.setRendered(isVisible(columnName));
}
}
Это работает, за исключением, что у меня есть проблемы с первым вызовом. Этот метод должен быть вызван в первый раз после заполнения DataTable его столбцами и до того, как dataTable получит визуализацию в первый раз.
Моя первоначальная идея состояла в том, чтобы ввести @FacesComponent, связать свою columnToggler к этому @FacesComponent и слушать некоторых JSF событий, но, например, с этой реализации столбцы будут обновляться только на второй вызов:
@FacesComponent(...)
public class ColumnTogglerComponent extends UINamingContainer
@Override
public void processEvent(ComponentSystemEvent event) throws AbortProcessingException {
// will be triggered for a javax.faces.event.PostRestoreStateEvent
// to late !
}
Где я могу поместить вызов renderColumnsInDataTable? Как вызвать его?
BTW: Я использую PrimeFaces 4.0.