2012-09-22 52 views
0

可能重複:
How to ajax-update the p:dataTable from inside the p:dataTable itself?刷新數據錶行(添加,修改,刪除...)

在我的XHTML頁面我有一個包含型組對象的DataTable,並添加一個新的組到數據庫,並最終在數據庫中的按鈕 我使用sessionScoped託管的Bean,所以我需要刷新我的數據表後添加一條新的記錄。

爲此,我使用的命令按鈕組件的更新屬性,但數據表不刷新,這裏是代碼:

<p:fieldset legend="Groups"> 

    <p:commandButton id="newGroup" value=" New Group" onclick="newGoupDlg.show();" 
     type="button" update="groupsDataTable"/> 
        <br/> 

     <p:dataTable id="groupsDataTable" var="group" value="# 
     {projectAdminisrationMB.groupsList}" 
        rowKey="#{group.name}" 
        rowIndexVar="rowIndex" 
         binding="#{table}"> 

         <f:facet name="header"> 

         </f:facet> 

         <p:column id="column2"> 
      <f:facet name="header"> 
      <h:outputText value="Group Name"></h:outputText> 
      </f:facet> 
     <p:graphicImage value="/images/group/#{group.name}.gif" /> 


    <h:commandLink action="#{projectAdminisrationMB.showGroupDetails}" 
     value="#{group.name}"> 
<f:setPropertyActionListener target="#{projectAdminisrationMB.selectedGroup}" 
     value="#{group}" /> 
<f:setPropertyActionListener target="#{projectAdminisrationMB.selectedGroupName}" 

    value="#{group.name}" /> 


    <f:setPropertyActionListener target="# 
    {projectAdminisrationMB.selectedGroupDescription}" value="#{group.description}" /> 
     <f:setPropertyActionListener target="# 
    {projectAdminisrationMB.selectedGroup.dbRowIndex}" value="#{table.rowIndex}" /> 

     </h:commandLink> 

    </p:column> 
     <p:column id="column3"> 
    <f:facet name="header"> 
    <h:outputText id="text3" value=" Group Description "></h:outputText> 
    </f:facet> 
     <h:outputText value="#{group.description}"></h:outputText> 
    </p:column> 


       <f:facet name="footer"> 

         </f:facet> 
       </p:dataTable> 


      <p:dialog header="New Group" widgetVar="newGoupDlg" width="750" 

     showEffect="explode" hideEffect="explode"> 
         <br/> <br/> 
         <h:outputText value=" New Group : " /> 

         <p:inputText id="newGroupName" value="# 

      {projectAdminisrationMB.newGroup.name}"> 
          <f:validator validatorId="requiredValidator"></f:validator> 
         </p:inputText> 
         <br/> <br/> 
         <h:outputText value="Group Description :" /> 
          <br/> <br/> 
         <p:editor id="newGroupDescription" value="# 


     {projectAdminisrationMB.newGroup.description}" width="600"/> 
         <br/> <br/> 

     **<p:commandButton id="ValidateNewGroup" value="Validate" 
      actionListener="#{projectAdminisrationMB.addNewGroup}" 
      onclick="newGoupDlg.hide()" update="groupsDataTable" ></p:commandButton>** 


         <p:commandButton id="CancelNewGroup" value=" Cancel " 
       onclick="newGoupDlg.hide()"></p:commandButton> 

        </p:dialog> 

        <br/> <br/> 

       </p:fieldset> 

任何想法將apprecited

+1

嘗試檢查在Firebug的錯誤。可能的原因是你的'dataTable'已經預置了'id'。嘗試將'prependId ='false''設置爲'form'或者使用'update =「:groupsDataTable」'或'update =「fooFormId:groupsDataTable」'。此外,我建議不要使用'onclick',而是在按鈕上使用'oncomplete' - 有時會導致問題(但當然這很重要)。 – Fallup

+0

這些組件的封裝形式在哪裏?你是使用SessionScoped bean作爲整個頁面的支持bean還是隻使用容器來訪問數據庫? – kolossus

+0

@kolossus sessionScoped bean用於整個頁面 – AmiraGL

回答

2

最常見的原因爲您的問題是數據表的id沒有被正確引用。

在您的瀏覽器中檢查數據表的實際ID是什麼。

當您的數據表格位於一個容器中時,容器的id被預置爲數據表的id(默認情況下)爲:

所以這樣的:

<h:form id="form"> 
    <p:dataTable id="dt" ... 
</h:form> 

將產生具有的form:dt

一個id當從另一容器內引用元素的容器內,你需要開始從根本上搜索數據表。這是通過在ID前添加:來完成的。

例子:

<h:form id="form"> 
    <p:dataTable id="dt" ... 
</h:form> 

<h:form id="btnForm"> 
    <p:commandButton update=":form:dt" ... 
</h:form> 

你也可以使用綁定:

<h:form binding="#{form}"> 
    <p:dataTable id="#{dt}" ... 
</h:form> 

<h:form id="#{btnForm}"> 
    <p:commandButton update=":#{dt.clientId}" ... 
</h:form> 
+0

如果上下文無法在JSF2中找到指定的客戶端ID,則不會引發異常? – kolossus

+0

@ kolossus:''會的,是的。 ''不會,不會。 – BalusC

+0

@BalusC剛剛檢查,(我確信其他人也是)失敗。它編譯頁面,但是仍然拋出異常:'SEVERE:javax.faces.FacesException:無法找到標識爲「pickedGrams」的組件,該引用來自「j_idt32:grammarMgmtMenu」'。 PF 3.4RC1 - kolossus 1小時前 – kolossus

相關問題