Mostrar datos usando JSF dataTable
Pregunta
Quiero mostrar datos usando el h:dataTable
Etiquetas en JSF Los datos que estoy mostrando deben estar en un formato como este:
Name: XXXX
ID: 8989
Age: 32
He visto varios ejemplos en la web que le dicen cómo mostrar los datos de la misma manera:
Nombre ID Age XXX 8989 32
desde el dataTable
la etiqueta solo tiene una subetiqueta h:column
y no h:row
Tengo problemas con esto.¿Hay una mejor manera de hacer esto?He implementado el primer formato que mencioné usando h:datable
y h:column
, así que primero escribo todos los encabezados de las columnas en la columna 1 y luego escribo todos los valores en la columna 2.El problema al que me enfrento es que cuando uno de los valores está en blanco, el siguiente valor se imprime en su lugar y los datos aparecen incorrectos; esto es realmente un problema de formato.Cuando los datos están en blanco, debe dejar espacio para ellos y luego imprimir el siguiente valor en la siguiente fila.Espero tener sentido, cualquier idea será muy apreciada.
Intenté agregar lo siguiente:
<h6><h:outputText value="#{empty imeiInfo.userEmail ? ' ' : imeiInfo.userEmail}"></h:outputText></h6><br/>
Pero hay un error de sintaxis en esto que no puedo entender, el mensaje que recibo es:
Error de sintaxis en EL
¿Algunas ideas?Gracias.
Solución
¿Es solo para datos que no se repiten? Si es así, use <h:panelGrid>
Por ejemplo:
<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>
Si es para repetir datos (es decir, múltiples 'personas'), entonces tiene varias opciones dependiendo de qué otras bibliotecas esté utilizando. Por ejemplo:
1: Cree su propia tabla con Facelets <ui:repeat>
(puede hacer lo mismo con <c:for>
). Por ejemplo:
<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>
EDITAR: no he intentado esto, pero debería poder rodear el en el primer ejemplo (<=>) con un <=> para representar elementos repetidos. El <=> se procesa antes que el <=>. Debería funcionar.
Otros consejos
No estoy seguro de entender cómo quiere renderizar su tabla. Creo que nos ayudaría si pudiera proporcionar el código JSF de su tabla ...
Sin embargo, con respecto a este punto:
Cuando los datos están en blanco, deberían dejar espacio para ello y luego imprima el siguiente valor en la siguiente fila
tal vez puedas probar algo así:
<h:outputText value="#{empty aRecord.name ? ' ' : aRecord.name}"/>
Este código generará un espacio irrompible si el nombre del registro está vacío; de lo contrario, representará el name
del registro.