Ajuda com SUBTABLE no Primefaces, coisa rápida

4 respostas
V

Preciso que minha tabela se comporte da seguinte forma:

======================================
= nome | Email

= ----------| [email removido]
= --Jose—| [email removido]
=----------| [email removido]

=---------- | [email removido]
=-Maria----| [email removido]
=---------- | [email removido]

=---------- | [email removido]
=-Antônio–| [email removido]
=---------- | [email removido]

Entenderam? Um table na qual passo a lista de pessoas e uma subtable na qual passo a lista de emails de cada pessoa…
Tentei olhar a documentação e fazer por ela mas ele só se comporta de maneira errada, com o campo nome preenchido e o campo email em branco aparecendo a lista de emails assim:

======================================
= nome | Email

= José |

= [email removido]
= [email removido]
= [email removido]

= Maria |
= [email removido]
= [email removido]
= [email removido]

Meu código:

<p:dataTable id="dataTableUsuario" var="pessoa" value="#{pessoaMB.pessoas}" paginator="true" rows="5" 
                             rowsPerPageTemplate="5,10,20" emptyMessage="Nenhum elemento encontrado"
                             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} 
                             {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}">
                    <f:facet name="header">
                        Lista de Usuários
                    </f:facet>
                    <p:column headerText="CPF" >
                        <h:outputText value="#{pessoa.cpf}"/>
                    </p:column>
                    <p:column headerText="Nome" >
                        <h:outputText value="#{pessoa.nome}"/>
                    </p:column>
                    <p:column headerText="Data de Nascimento">
                        <h:outputText value="#{pessoa.dataDeNascimento}">
                            <f:convertDateTime pattern="dd/MM/yyyy"/>
                        </h:outputText>
                    </p:column>
                    <p:column headerText="Login">
                        <h:outputText value="#{pessoa.login}"/>
                    </p:column>

                    <p:column headerText="Email">
                        <p:subTable var="email" value="#{pessoa.emails.toArray()}">
                            <p:column>
                                <h:outputText value="#{email.enderecoDeEmail}"/>
                            </p:column>
                        </p:subTable>
                    </p:column>
                </p:dataTable>

Alguém pode dar a dica?

4 Respostas

H

Não sei não, mas acho que seu erro ta aqui: #{pessoa.emails.toArray()}

Pq vc não cria um método List getEmailsAsList e depois você coloca #{pessoa.emailsAsList()}

V

Oi Jakefrog, desde já, obrigado aí por ajudar o pessoal, sempre vejo você ajudando muito nos posts…

Bem… O minha entidade Pessoa tem um set de emails, do mesmo jeito que o hibernate recomenda… E quando acesso #{pessoa.emails} ele retorna um PersistentSet (tá vindo correto) mas quando mando imprimir o nome do email <h:outputText value:#{#email.nomeDoEmail}/> ele não funciona, só funciona quando passo por array dessa forma aí. Sei que por lista ficaria melhor mas não posso mais mexer no modelo, teria como eu converter isso para list no próprio JSF?

Valeu cara!

H

Você está utilizando um set para emails? Se for, é por isso que não funciona.

Por isso q eu disse para você criar um asList. Eu fiz assim para poupar tempo em meu projeto de TCC. Foi mais fácil. [=

Converter como List dentro do JSF? nunca ouvi falar disso não.

V

Rapaz, mudei aqui pra List e tava dando na mesma coisa, voltei para o Set de Emails! Acho que tem a ver mais com o primefaces mesmo, alguma coisa que estou esquecendo na construção dessa tabela… As células contendo os emails não querem ficar na célula “Emails” e sim continuam aparecendo em linhas abaixo… =P
Usei o componente DataList dentro do campo Email, e até que funfou, mas isso me cheira muito mal viu… (bad smell)

Criado 2 de abril de 2012
Ultima resposta 2 de abr. de 2012
Respostas 4
Participantes 2