К сожалению, нет, это невозможно. Столбец таблицы не может быть представлен одним элементом HTML. На самом деле это коллекция свободных <td>
элементов. Технически, вам нужно было бы ссылаться на каждый <td>
индивидуально, чтобы иметь возможность ajax-рендеринга с помощью JSF. Поскольку вы не можете дать каждому <td>
идентификатор клиента с помощью JSF, на этом все заканчивается. Вы можете назначить им общее имя класса, но атрибут JSF ajax render
не работает с именами классов.
Лучше всего показать / скрыть их с помощью чистого CSS / JS. Установите display: none;
для элементов <td>
одного столбца, а затем используйте JS для переключения на display: block;
и установите display: none;
для элементов <td>
другого столбца. Вы можете присвоить <td>
отдельного столбца конкретное имя класса, используя атрибут columnClasses
.
Пример запуска:
<h:dataTable id="table" binding="#{table}" columnClasses="col1,col2">
<h:column>...</h:column>
<h:column>...</h:column>
</h:dataTable>
<f:ajax>
<h:commandButton ... onclick="switchToCol1('#{table.clientId}')" />
<h:commandButton ... onclick="switchToCol2('#{table.clientId}')" />
</f:ajax>
(на самом деле, если не нужно вызывать действие bean-компонента, тогда достаточно простого <button>
)
с этим CSS
.col1 {
display: none;
}
и этот JS / jQuery:
function switchToCol1(tableId) {
var $table = $("[id='" + tableId + "']");
$('.col1', $table).show();
$('.col2', $table).hide();
}
function switchToCol2(tableId) {
var $table = $("[id='" + tableId + "']");
$('.col1', $table).hide();
$('.col2', $table).show();
}