JSF 2 + Primefaces — обновление не работает

Я уже искал, но даже реализовав найденные решения, я не смог заставить это работать. Я выбираю строку в таблице данных и нажимаю кнопку «Удалить», чтобы удалить выбранный объект, но объект удаляется, но таблица данных не обновляется. Вот мой код:

<h:form id="formPesquisa">  
            ...
            <h:panelGroup id="panelToRender" layout="block">
                <h:panelGroup id="panelDataTable" rendered="#{not empty bean.dataList}" layout="block">
                    <div id="dataTableRegion">
                        <p:panel id="panelBtnsUp" styleClass="cleanPanel">
                            <ui:include src="/templates/btnDataList.xhtml" />
                        </p:panel>
                        <h:panelGroup id="panelTableHolder" layout="block">
                            <p:dataTable id="dataTableBusca" value="#{bean.dataList}" var="entidade" 
                                rendered="#{not empty bean.dataList}" paginator="true" style="width:100%;"
                                selection="#{bean.entidadesSelecionadas}" onRowSelectUpdate="panelBtnsUp,panelBtnsDown,dataTableBusca"
                                onRowUnselectUpdate="panelBtnsUp,panelBtnsDown,dataTableBusca" rowUnselectListener="#{bean.rowUnselectListener}" selectionMode="multiple">
                                <p:column>
                                    <p:graphicImage url="/icons/checkbox_no.png" rendered="#{!bean.containsSelection(entidade)}" />
                                    <p:graphicImage url="/icons/checkbox_yes.png" rendered="#{bean.containsSelection(entidade)}" />
                                </p:column>
                                <ui:insert name="colunasPesquisa" />
                            </p:dataTable>
                        </h:panelGroup>
                        <p:panel id="panelBtnsDown" styleClass="cleanPanel">
                            <ui:include src="/templates/btnDataList.xhtml" />
                        </p:panel>
                    </div>
                </h:panelGroup>
            </h:panelGroup>
            ....
</h:form>

И кнопка «Удалить» находится во включенном файле:

<div style="margin:5px 0;">
    <p:commandButton value="#{msg['commons.excluir']}" image="delete" disabled="#{bean.disableDelete()}" action="#{bean.delete}" update="panelDataTable" />
    <p:commandButton value="#{msg['commons.editar']}" image="edit" disabled="#{bean.disableEdit()}" action="#{bean.prepareEdit}" ajax="false" />
</div>

Я уже пробовал:

update="dataTableBusca"
update="panelTableHolder"
update="formPesquisa:dataTableBusca"
update="formPesquisa:panelTableHolder"

Что я делаю не так???

Спасибо за любую помощь.


person Joshua Vicentini    schedule 13.04.2011    source источник


Ответы (1)


Первые два подхода будут работать, только если ваша кнопка и обновленные элементы являются родственными.

Для третьего и четвертого подходов вам нужно обойти все содержащие элементы, чтобы получить правильный идентификатор. Ваш PanelTableHolder находится внутри двух других h:panelGroup (panelToRender, panelDataTable) и div (dataTableRegion).

Кроме того, чтобы убедиться, что вы начинаете с самого высокого уровня, добавьте : перед идентификатором формы.

Попробуй это:

update=":formPesquisa:panelToRender:panelDataTable:dataTableRegion:panelTableHolder"

Вы можете проверить отображаемый html, если это правильный путь для вашего panelTableHolder.

person Matt Handy    schedule 13.04.2011
comment
Спасибо за быстрый ответ! Итак... я видел отрендеренный html, а идентификатор dataTableHolder - formPesquisa:panelTableHolder. Но даже если я поставлю так, это не сработает. Как вы думаете, это может быть связано с тем, что сначала панель DataTable не отображается? - person Joshua Vicentini; 13.04.2011
comment
Вы пробовали update=@form? Кроме того, вам нужно h:head вместо head, чтобы включить библиотеки js для ajax. - person Matt Handy; 13.04.2011