"Записи не найдены" не учитывает условно отображаемый столбец p:dataTable

В настоящее время у меня небольшая проблема с отображаемым атрибутом столбца в моей таблице данных с использованием PrimeFaces 4.0. У меня в таблице есть столбец, который не всегда должен отображаться, поэтому я использовал его визуализированный атрибут и извлекал значение из моего компонента поддержки. Это 6-й и последний столбец. DataTable находится внутри a p: диалогового окна, которое будет показано в конце метода.

Атрибут рендеринга, кажется, работает правильно, потому что когда showColumn имеет значение false, столбец не будет отображаться, и наоборот, но есть проблема. Как видно на картинке, "Записи не найдены". сообщение не может доходить до последнего столбца. Когда я пытаюсь удалить визуализированный атрибут или вручную установить его значение true (без использования значения базового компонента), "Записи не найдены". сообщение будет доходить до последнего столбца, как и ожидалось.

Весь диалог / форма, содержащая эти элементы, похоже, корректно обновляется после запроса ajax.

Метод поддержки бобов:

public void getStatus(final MyClass foo, boolean showColumn) {

    updateForm(foo);
    setShowColumn(showColumn);

    RequestContext.getCurrentInstance().execute("dailyStatus.show();");
}

Часть столбца в xhtml:

<p:column headerText="Problematic Column" styleClass="tablecenter" rendered="#{myMBean.showColumn}">
    <p:commandLink id="view"
        action="#{myMBean.doSomething}" update="@form"
        rendered="#{obj.status.equals('FAILED')? 'true' : 'false'}"
        onclick="spin_start()" oncomplete="spin_stop()">
        <h:graphicImage name="images/restart.png" styleClass="icon" />
    </p:commandLink>
</p:column>

Как показано в таблице:Как показано на странице

1 ответ

Решение

Для PrimeFaces 4.0 есть "решение", в котором я прибег к хакерскому решению проблемы с помощью jQuery. В последних версиях PrimeFaces это уже исправлено

Когда необходимо отобразить динамический столбец, я использую флаги в своем компоненте поддержки и затем вызываю этот метод. (и список для datatable должен быть нулевым или пустым, как упомянуто в проблеме)

RequestContext.getCurrentInstance().execute("$('[id=\"myForm:myDataTable\"] tr.ui-widget-content td').attr('colspan', 6);");

Это заставляет colspan одного тд в строке после строки заголовка, чтобы достичь до последнего столбца заголовка. Надеюсь, что это поможет другим, которые столкнутся с этой проблемой в будущем!

Другие вопросы по тегам