0

重複の可能性:
p:dataTable 自体の内部から p:dataTable を ajax 更新する方法は?

私のxhtmlページには、タイプ Group のオブジェクトを含む 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>  

どんなアイデアでも歓迎されます

4

1 に答える 1

2

問題の最も一般的な原因は、データ テーブルの ID が適切に参照されていないことです。

ブラウザで、データ テーブルの実際の ID を確認してください。

データ テーブルがフォームのようなコンテナ内にある場合、コンテナの ID はデータ テーブルの ID の前に追加され、(デフォルトでは) で区切られます:

したがって、この:

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

のIDを持つデータテーブルになりますform:dt

別のコンテナ内からコンテナ内の要素を参照する場合、ルートから検索を開始する必要があります。これは:、id の前に a を追加することによって行われます。

例:

<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>
于 2012-09-22T18:30:35.730 に答える