Afficher une liste d'images dans un format de tableau dans JSF

c'est probablement une question très simple de JSF, mais je n'arrive pas à trouver la réponse simple.

j'ai une Liste d'images, et je veux les afficher dans un tableau d'images. Chaque image est affichée avec son nom de fichier. J'utilise une étiquette ui:repeat comme montré ci-dessous. Je ne reçois pas 5 colonnes comme demandé, cependant, seulement 1.

<h:panelGrid id="resourcePanel" columns="5" rules="all">
    <ui:repeat var="res" value="#{resourceUpload.resources}">
        <h:panelGrid columns="1" rules="none">
                <h:graphicImage
                    value="/image/resource?id=#{res.idAsString}"
                    style="width:100px;" />
                <h:outputText value="#{res.name}" />
        </h:panelGrid>
    </ui:repeat>
</h:panelGrid>
2
demandé sur Brian Tompsett - 汤莱恩 2012-11-28 05:46:48

2 réponses

la sortie est entièrement comme prévu et spécifié. Le <ui:repeat> est une étiquette de temps de rendu, pas une étiquette de temps de compilation de vue comme <c:forEach> . Après avoir construit la vue, <h:panelGrid> se termine avec 1 composant enfant (le <ui:repeat> lui-même), pas avec n imbriqué <h:panelGrid> composants comme vous obtiendriez avec <c:forEach> .

<html ... xmlns:c="http://java.sun.com/jsp/jstl/core">
...
<h:panelGrid id="resourcePanel" columns="5" rules="all">
    <c:forEach var="res" items="#{resourceUpload.resources}">
        <h:panelGrid columns="1" rules="none">
            <h:graphicImage
                value="/image/resource?id=#{res.idAsString}"
                style="width:100px;" />
            <h:outputText value="#{res.name}" />
        </h:panelGrid>
    </c:forEach>
</h:panelGrid>

#{resourceUpload} : il ne peut pas être une vue scoped bean, il doit être demande scoped en raison d'un problème d'œuf de poulet en vue sauver / restaurer l'état; vous auriez besoin de mettre à niveau vers Mojarra 2.1.18)

Votre imbriquée <h:panelGrid> fait par la voie pas de proférer des sens. J'aurais utilisé <h:panelGroup> ici.

voir aussi:

2
répondu BalusC 2017-05-23 12:12:23

pourquoi utilisez-vous un autre <h:panelGrid> dans le <ui:repeat> ? Tu peux juste utiliser une div comme ça.

Au lieu de

<h:panelGrid columns="1" rules="none">

utiliser

<div style="display:inline-block;">

Edit:


Je ne pense pas que tu puisses le faire avec <ui:repeat> . Utilisez <c:forEach> à la place.

vous devez d'abord importer l'espace de noms

xmlns:c="http://java.sun.com/jstl/core"

maintenant remplacer le <ui:repeat> par <c:forEach> comme suit.

<c:forEach items="#{accountMastList.resultList}" var="res">
2
répondu prageeth 2012-11-28 08:47:17