2011-04-13 93 views
1

我已经搜索过了,但即使实施了我找到的解决方案,我也无法实现这一目标。我在数据表中选择一行,然后单击删除按钮删除所选对象,但对象被删除但数据表未更新。这里是我的代码: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> 

我已经尝试过:

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

我在做什么错?

感谢您的任何帮助。

回答

3

前两种方法只适用于您的按钮和更新元素是兄弟。

对于第三种和第四种方法,您必须遍历所有包含元素才能获得正确的ID。你panelTableHolder在另外两个h:panelGroup(panelToRender,panelDataTable)和一个div(dataTableRegion)中。

此外为了确保您从最高级别开始,请在表单ID之前添加a:。

试试这个:

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

你可以检查中呈现的HTML,如果这是你的panelTableHolder正确的路径。

+0

Thansk快速回复!所以...我看到了呈现的html,并且dataTableHolder的id是formPesquisa:panelTableHolder。但即使我这样说,它也行不通。你认为这可能与事实有关:首先panelDataTable没有被渲染? – 2011-04-13 15:26:29

+1

你试过update =“@form”吗?此外,你需要'h:head'而不是'head'来包含js库中的ajax。 – 2011-04-13 18:57:10

+0

update =“@ form”确实有效。谢谢! – 2011-04-13 21:37:35