2011-10-06 9 views
0

私は内部に2つのdataTableを持つdataTableを作成しています:)。PrimeFaces dataTableはバインディング属性が存在する場合にレンダリングしません

今回は、最初のdataTableをラップするh:panelGroupでバインディング属性を使用しようとするとレンダリングする際に問題が発生します。 私はバインディングを使用して、panelGroupをリフレッシュするのを手伝っています。これは、BalusCのようにthis questionに記載されています。バインディング属性を削除すると、dataTableは通常どおりレンダリングされますが、もちろんdataTables内にはf:ajaxタグは表示されません。しかし、成功せず、のdataTable:Pの内側にあるのDataTable:私はすでに時間を削除しようとした

<ui:component> 
<h:panelGroup> 
    <h:panelGroup layout="block;" id="#{id}" 
     binding="#{painelTabelaContatos}" rendered="true"> 
     <p:dataTable id="tabela#{id}" 
      value="#{modeloTabelaContatos.listaDeContatos}" var="contato" 
      selectionMode="single" 
      rowSelectListener="#{controladorTabelaContatos.processarSelecaoLinha}" 
      rowUnselectListener="#{controladorTabelaContatos.processarDeselecaoLinha}" 
      selection="#{modeloTabelaContatos.contatoSelecionado}"> 
      <p:column headerText="Contatos"> 
       <hrgi:editableText style="width:100%" value="#{contato.descricao}" /> 
      </p:column> 
      <p:column headerText="Telefones"> 
       <h:dataTable value="#{contato.telefones}" var="telefone"> 
        <h:column> 
         <h:inputText value="#{telefone}" /> 
        </h:column> 
        <h:column> 
         <h:graphicImage library="img" name="default_trash.png" 
          style="cursor:pointer;"> 
          <f:ajax event="click" render=":#{painelTabelaContatos.clientId}" 
           listener="#{controladorTabelaContatos.removerTelefone(contato, telefone)}" /> 
         </h:graphicImage> 
        </h:column> 
       </h:dataTable> 
      </p:column> 
      <p:column headerText="e-mails"> 
       <h:dataTable value="#{contato.emails}" var="email"> 
        <h:column> 
         <h:inputText value="#{email}" /> 
        </h:column> 
        <h:column> 
         <h:graphicImage library="img" name="default_trash.png" 
          style="cursor:pointer;"> 
          <f:ajax event="click" render=":#{painelTabelaContatos.clientId}" 
           listener="#{controladorTabelaContatos.removerEmail(contato, email)}" /> 
         </h:graphicImage> 
        </h:column> 
       </h:dataTable> 
      </p:column> 
      <p:column> 
       <h:graphicImage library="img" name="default_trash.png" 
        style="cursor:pointer;"> 
        <f:ajax render=":#{painelTabelaContatos.clientId}" event="click" 
         listener="#{controladorTabelaContatos.removerContato(contato)}" /> 
       </h:graphicImage> 
      </p:column> 
     </p:dataTable> 
    </h:panelGroup> 
    <h:panelGroup layout="block"> 
     <p:commandButton value="ADICIONAR CONTATO" update="#{id}" 
      immediate="true" 
      action="#{controladorTabelaContatos.adicionarContato}" /> 
     <p:commandButton value="ADICIONAR TELEFONE" update="#{id}" 
      immediate="true" 
      action="#{controladorTabelaContatos.adicionarTelefone}" /> 
     <p:commandButton value="ADICIONAR E-MAIL" update="#{id}" 
      immediate="true" 
      action="#{controladorTabelaContatos.adicionarEmail}" /> 
    </h:panelGroup> 
</h:panelGroup> 
</ui:component> 

:ここ

は、XHTMLです。 このコンポーネントはPrimeFacesタブのコンテンツに過ぎず、このタブはPrimeFacesダイアログ内にあります。誰かが私になぜこのことが起こっているのか説明できますか?

私はそれが解決策を見つけることは簡単だった後、私は2つの異なるページに、このコンポーネントを呼び出すために... 問題が発生し、エラーの原因を見つけた
+0

あなたはそれがうまくいったと言いましたか?唯一の違いは、静的IDの代わりに動的IDを ''に割り当てることです。おそらくIDは、あなたがajaxリクエストを送信したときにもう存在しないソースから来ているでしょうか? – BalusC

+0

私のせいでした。私は間違っていた。 – brevleq

+0

さて、あなたは答えとしてそれを投稿しました。 – BalusC

答えて

1

popupCadastroPessoa.xhtml

<ui:include src="../tabs/abaEdicaoContatos.xhtml"> 
    <ui:param name="id" value="painelContatoPessoa" /> 
</ui:include> 

とpopupCadastroFuncionario.xhtml

<ui:include src="../tabs/abaEdicaoContatos.xhtml"> 
    <ui:param name="id" value="painelContatoFuncionario" /> 
</ui:include> 

原因には、私は本当にバインディングBeanを作成していなかった、JSFは混乱します。だから私はちょうど2つのUIPanelの豆を作成し、パラメータとしてそれを渡しました:

<ui:include src="../tabs/abaEdicaoContatos.xhtml"> 
    <ui:param name="id" value="painelContatoPessoa" /> 
    <ui:param name="painelTabelaContatos" value="#{bindingTabelaContatoPessoa}"/> 
</ui:include> 

私のせいでした。ご迷惑をおかけして申し訳ありません。

関連する問題