2 votes

Afficher une liste d'images sous forme de tableau en JSF

Il s'agit probablement d'une question JSF très simple, 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 un ui:repeat comme indiqué ci-dessous. Je n'obtiens pas 5 colonnes comme demandé, mais 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>

2voto

prageeth Points 2504

Pourquoi utilisez-vous un autre <h:panelGrid> à l'intérieur de la <ui:repeat> ? Vous pouvez simplement utiliser un div comme ceci.
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.

Tout d'abord, vous devez importer l'espace de nom

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

Remplacez maintenant le <ui:repeat> avec <c:forEach> comme ça.

<c:forEach items="#{accountMastList.resultList}" var="res">

2voto

BalusC Points 498232

Le résultat est entièrement conforme aux attentes et aux spécifications. Le site <ui:repeat> est une balise de temps de rendu, pas une balise de temps de construction de vue comme <c:forEach> . Après avoir construit la vue, <h:panelGrid> se retrouve avec 1 composant enfant (le <ui:repeat> lui-même), et non avec n emboîté <h:panelGrid> composants comme ceux que 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>

(dans les versions de Mojarra antérieures à 2.1.18, cela a toutefois une incidence sur le système de gestion de la sécurité). #{resourceUpload} il ne peut pas s'agir d'un bean de type "view scoped", il doit être de type "request scoped" en raison d'un problème de sauvegarde/restauration de l'état de la vue ; vous devez mettre à jour Mojarra 2.1.18).

Votre emboîtement <h:panelGrid> n'a d'ailleurs aucun sens. J'aurais utilisé <h:panelGroup> ici.

Voir aussi :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X