2011-10-06 4 views
0

Я создаю dataTable с двумя dataTable внутри :).PrimeFaces dataTable не визуализирует, когда существует атрибут привязки

Но на этот раз у меня возникли проблемы с отображением, когда я пытаюсь использовать атрибут привязки в h: panelGroup, который обертывает первый dataTable. Я использую привязку, чтобы помочь обновить только панель Group, например, BalusC рассказала в this question. Когда я удаляю атрибут привязки, dataTable отображается нормально, но, конечно же, ничего не отображается с помощью тегов f: ajax внутри dataTables.

Вот XHTML:

<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> 

Я уже пытался удалить час: DataTables, которые находятся внутри р: DataTable, но без успеха. Этот компонент представляет собой только вкладку PrimeFaces, и эта вкладка находится в диалоговом окне PrimeFaces. Может кто-нибудь объяснить мне, почему это происходит?

+0

Вы упомянули, что это сработало? Единственное различие заключается в том, что теперь вы назначаете '' динамический идентификатор вместо статического идентификатора. Возможно, идентификатор поступает из источника, который больше не существует, когда вы отправляете запрос 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> 

, потому что я действительно не создал связывающий компонент, JSF запутается. Поэтому я только что создал два компонента UIPanel и передал их как параметр:

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

Была моя ошибка. Спасибо за внимание и извините за неудобства.

Смежные вопросы