PrimeFaces DataTable удаляется при использовании paginator

Я пытаюсь перенести свое WebApp из IceFaces 3.3.0 в PrimeFaces 6.1, и с некоторыми хитрыми изменениями в IceFaces я запустил оба с JSF 2.2 на WildFly. Или, по крайней мере, это похоже на работу.

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

На самом деле на стороне клиента он делает именно то, что сервер говорит ему делать. Класс DOMPartialRenderCallback объекта IceFaces обрабатывает запрос и начинает кодировать дерево компонентов. Это вызывает метод encodeEnd() объекта DataTableRenderer:

public void encodeEnd(FacesContext context, UIComponent component) throws IOException{
    DataTable table = (DataTable) component;

    if(table.shouldEncodeFeature(context)) {
        for(Iterator<DataTableFeature> it = DataTable.FEATURES.values().iterator(); it.hasNext();) {
            DataTableFeature feature = it.next();

            if(feature.shouldEncode(context, table)) {
                feature.encode(context, this, table);
            }
        }
    }
    else {  
        preRender(context, table);

        encodeMarkup(context, table);
        encodeScript(context, table);
    }

    context.getApplication().publishEvent(context, PostRenderEvent.class, table);
}

В условии if он проверяет наличие uglobal:systemMessages:systemMessageTableValues_encodeFeature параметр, который будет true если я использую paginator и false для не-AJAX-запросов (или не существует). В другом случае все работает отлично, но в противном случае он не будет отображать реальную таблицу, только текущую страницу. Поэтому, когда IceFaces пытается вычислить разницу, он не находит таблицу с id="systemMessageTableValues" и вещи, которые он удаляет и говорит клиенту, чтобы удалить его тоже.

На самом деле я понятия не имею, почему IceFaces обрабатывает запрос, хотя на текущей странице нет компонента IceFaces (на других страницах есть компоненты IceFaces). Тем не менее, я хотел бы знать, почему PrimeFaces не рендерит всю таблицу и как я могу это исправить.

dataTable.xhtml:

<p:dataTable width="100%" id="systemMessageTableValues" dataLocale="en_US"
    value="#{systemMessages.dataModel}" var="item" rows="16" 
    style="margin:0px;" paginator="true" paginatorPosition="top"
    lazy="true" 
    paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks}{NextPageLink} {LastPageLink}">
        ... some columns ...
</p:dataTable>

0 ответов

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