Affichage de données à l'aide de JSF dataTable
Question
Je souhaite afficher des données à l'aide des balises h:dataTable
dans JSF
Les données que j'affiche doivent être dans un format comme celui-ci:
Name: XXXX
ID: 8989
Age: 32
J'ai vu plusieurs exemples sur le Web qui vous expliquent comment afficher le des données comme celle-ci:
Nom Identité Age XXX 8989 32
Étant donné que la balise dataTable
ne comporte qu'une sous-balise h:column
et NON h:row
je rencontre
problèmes avec cela. Y a-t-il une meilleure manière de faire cela? J'ai mis en place le premier
J'ai déjà mentionné le format avec h:datable
et <=>, c'est pourquoi je commence par écrire tous les en-têtes de colonne de la colonne 1, puis toutes les valeurs de la colonne2. Le problème auquel je suis confronté est que, lorsqu'une des valeurs est vide, la valeur suivante est imprimée à sa place et que les données semblent fausses, il s'agit en réalité d'un problème de mise en forme. Lorsque les données sont vides, elles doivent laisser de la place, puis imprimer la valeur suivante dans la rangée suivante.
J'espère avoir un sens, toutes les pensées seront très appréciées.
J'ai essayé d'ajouter ce qui suit:
<h6><h:outputText value="#{empty imeiInfo.userEmail ? ' ' : imeiInfo.userEmail}"></h:outputText></h6><br/>
Mais il y a une erreur de syntaxe que je ne peux pas comprendre, le message que je reçois est le suivant:
Erreur de syntaxe dans EL
Des idées? Merci.
La solution
Est-ce juste pour des données non répétitives? Si oui, utilisez <h:panelGrid>
Par exemple:
<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>
S'il s'agit de répéter des données (c'est-à-dire plusieurs personnes), vous avez plusieurs options en fonction des autres bibliothèques que vous utilisez. Par exemple:
1: Construisez votre propre table en utilisant Facelets <ui:repeat>
(vous pouvez faire la même chose avec <c:for>
). Par exemple:
<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: Je n'ai pas essayé cette solution, mais vous devriez pouvoir entourer le premier exemple (<=>) d'un <=> pour restituer les éléments répétés. Le <=> est traité avant le <=>. Devrait fonctionner.
Autres conseils
Je ne suis pas sûr de comprendre comment vous voulez rendre votre table. Je pense que cela nous aiderait si vous pouviez fournir le code JSF de votre table ...
Cependant, concernant ce point:
Lorsque les données sont vierges, elles doivent laisser espace pour cela et ensuite imprimer la prochaine valeur dans la rangée suivante
Peut-être que vous pouvez essayer quelque chose comme ça:
<h:outputText value="#{empty aRecord.name ? ' ' : aRecord.name}"/>
Ce code générera un espace incassable si le nom de l’enregistrement est vide, sinon, il rendra le name
de l’enregistrement.