Exibindo dados usando JSF dataTable
Pergunta
Eu quero exibir dados usando as tags h:dataTable
em JSF
Os dados que eu estou exibindo tem que estar em um formato como este:
Name: XXXX
ID: 8989
Age: 32
Já vi vários exemplos na web que dizer-lhe como para exibir o dados como este:
Nome ID Idade XXX 8989 32
Uma vez que a tag dataTable
só tem um h:column
sub tag e NO h:row
Estou tendo
problemas com isso. Existe uma maneira melhor de fazer isso? Eu tenho implementado o primeiro
formatar mencionei usando h:datable
e h:column
, então primeiro eu só escrever para fora todos os cabeçalhos de coluna na coluna 1 e depois eu escrevo todos os valores em column2. O problema que estou enfrentando é que quando um dos valores está em branco o valor seguinte será impresso em seu lugar e os dados aparecem errado, isso é realmente um problema de formatação. Quando os dados está em branco deve deixar espaço para ele e, em seguida, imprimir o próximo valor na próxima linha.
Espero que eu estou fazendo sentido, qualquer pensamento será muito apreciado.
Eu tentei adicionar o seguinte:
<h6><h:outputText value="#{empty imeiInfo.userEmail ? ' ' : imeiInfo.userEmail}"></h:outputText></h6><br/>
Mas há um erro de sintaxe no presente que eu não consigo descobrir, a mensagem que recebo é:
Erro de sintaxe na EL
Todas as idéias? Obrigado.
Solução
É apenas para um não-repetição de dados? Se assim for, o uso <h:panelGrid>
Por exemplo:
<h:panelGrid columns="2">
<h:outputText value="Name:"/>
<h:outputText value="#{person.name}"/>
<h:outputText value="ID:"/>
<h:outputText value="#{person.id}"/>
<h:outputText value="Age:"/>
<h:outputText value="#{person.age}"/>
</h:panelGrid>
Se é para repetir dados (isto é. Múltiplas 'pessoas'), então você tem um número de opções dependendo do que outras bibliotecas que você está usando. Por exemplo:
1: Construa sua própria tabela usando Facelets <ui:repeat>
(você poderia fazer o mesmo com <c:for>
). Por exemplo:
<table>
<ui:repeat value="#{myBean.persons}" var="person">
<tr>
<td>
<h:outputText value="Name:"/>
</td>
<td>
<h:outputText value="#{person.name}"/>
</td>
</tr>
<tr>
<td>
<h:outputText value="ID:"/>
</td>
<td>
<h:outputText value="#{person.id}"/>
</td>
</tr>
<tr>
<td>
<h:outputText value="Age:"/>
</td>
<td>
<h:outputText value="#{person.age}"/>
</td>
</tr>
<tr>
<td colspan="2">
 
</td>
</tr>
</ui:repeat>
</table>
EDIT: Eu não tentei isso, mas você deve ser capaz de cercar o no primeiro exemplo (<h:panelGrid>
) com um <c:for>
para renderizar elementos repetidos. O <c:for>
é processado antes do <h:panelGrid>
. Deve funcionar.
Outras dicas
Eu não tenho certeza de entender como você deseja tornar sua mesa. Eu acho que nos ajudaria se você poderia fornecer o código JSF de sua mesa ...
No entanto, sobre este ponto:
Quando os dados está em branco deve sair espaço para ele e, em seguida, imprimir a próxima valor na linha seguinte
talvez você pode tentar algo como isso:
<h:outputText value="#{empty aRecord.name ? ' ' : aRecord.name}"/>
Este código irá processar um espaço inquebrável se o nome do registro está vazio, caso contrário ele irá processar a name
do registro.