#jsf #datatable #primefaces
#jsf #datatable #primefaces
Вопрос:
Я уже искал, но даже внедряя найденные решения, я не смог заставить это работать. Я выбираю строку в datatable и нажимаю на кнопку удалить, чтобы удалить выбранный объект, но объект удаляется, но datatable не обновляется. Вот мой код:
<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>
Я уже пробовал:
обновление=»dataTableBusca»
обновление=»panelTableHolder»
обновление=»formPesquisa:dataTableBusca»
обновление=»formPesquisa:panelTableHolder»
Что я делаю не так???
Спасибо за любую помощь.
Ответ №1:
Первые два подхода будут работать, только если ваша кнопка и обновленные элементы являются родными братьями.
Для третьего и четвертого подхода вам нужно просмотреть все содержащие элементы, чтобы получить правильный идентификатор. Ваш panelTableHolder находится внутри двух других h:panelGroup
(panelToRender, panelDataTable) и div
(dataTableRegion).
Кроме того, чтобы убедиться, что вы начинаете с самого высокого уровня, добавьте a : перед идентификатором формы.
Попробуйте это:
update=":formPesquisa:panelToRender:panelDataTable:dataTableRegion:panelTableHolder"
Вы могли бы проверить в отображаемом html, правильный ли это путь для вашего panelTableHolder.
Комментарии:
1. Спасибо за быстрый ответ! Итак … я действительно видел отрисованный html, и идентификатор dataTableHolder — formPesquisa:panelTableHolder. Но даже если я поставлю вот так, это не сработает. Как вы думаете, это может иметь какое-то отношение к тому факту, что сначала panelDataTable не отображается?
2. Вы пробовали update =»@form»? Кроме того, вам нужно
h:head
вместоhead
для того, чтобы включить библиотеки js для ajax.