2011-04-13 55 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