简体   繁体   English

JSF 2 + Primefaces-更新不起作用

[英]JSF 2 + Primefaces - Update Not Working

I'lve already searched, but even implementing the solutions I've found, I was not able to get this working. 我已经搜索过,但是即使实施我发现的解决方案,我也无法使它正常工作。 I select a row in a datatable and click on delete button to delete the selected object, but the object gets deleted but the datatable is not updated. 我在数据表中选择一行,然后单击删除按钮以删除所选对象,但是该对象被删除,但数据表未更新。 Here's my code: 这是我的代码:

<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>

And the Delete Button is in the included file: 删除按钮在包含的文件中:

<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>

I already tried: 我已经尝试过:

update="dataTableBusca" 更新= “dataTableBusca”
update="panelTableHolder" 更新= “panelTableHolder”
update="formPesquisa:dataTableBusca" 更新= “formPesquisa:dataTableBusca”
update="formPesquisa:panelTableHolder" 更新= “formPesquisa:panelTableHolder”

What am I doing wrong??? 我究竟做错了什么???

Thanks for any help. 谢谢你的帮助。

The first two approaches will only work if your button and the updated elements are siblings. 前两种方法仅在您的按钮和更新的元素为同级元素时才有效。

For the third and the fourth approach you have to traverse all containing elements in order to get the right id. 对于第三种方法和第四种方法,必须遍历所有包含的元素才能获得正确的ID。 You panelTableHolder is inside two other h:panelGroup (panelToRender, panelDataTable) and a div (dataTableRegion). 您的panelTableHolder位于另外两个h:panelGroup (panelToRender,panelDataTable)和一个div (dataTableRegion)内部。

Furthermore to make sure that you start from highest level, prepend a : before the form id. 此外,为确保您从最高级别开始,请在表单ID之前加一个:。

Try this: 尝试这个:

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

You could check in the rendered html if this is the correct path for your panelTableHolder. 您可以在渲染的html中检入这是否是panelTableHolder的正确路径。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM