IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

[JSP] Liste de checkboxes 2 niveaux de hiérarchie dans form


Sujet :

Servlets/JSP Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [JSP] Liste de checkboxes 2 niveaux de hiérarchie dans form
    Bonjour.
    N'étant pas expert jsp, je cherche la meilleure solution à adopter face au problème suivant:

    Dans le cadre d'un programme de génération de rapports, on désire afficher une liste de sections (catégories d'informations), et pour chaque catégorie une liste de sous-sections. Ces listes proviennent d'une base de données, et sont actuellement chargées en mémoire sous la forme d'un HashMap (les clés sont les noms des catégories) contenant chacune un HashMap (les clés sont les noms des sous-catégories) qui pourrait être une Collection.

    En gros, graphiquement, on voudrait ceci:

    • [] Categorie 1
      [list:1817ee447b][] Section 1.1
      [] Section 1.2
      [] Section 1.3

    [] Categorie 2
    • [] Section 2.1
      [] Section 2.2

    [] Categorie 3
    • [] Section 3.1
      [] Section 3.2
      [] Section 3.3
    [/list:u:1817ee447b]
    avec des cases à cocher devant chaque option.

    Pour afficher une liste simple, j'ai utilisé le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <html:form action="/showReport" name="frmReport"
        type="com....ReportBean" method="get">
            <logic:iterate name="reportBean" id="category" property="categories">
                <tr>
                    <td>
                        <html:multibox property="selectedItems">
                            <bean:write name="category" property="key" />
                        </html:multibox> 
                        <bean:write name="category" property="key" />
                    </td>
                </tr>
            </logic:iterate>
            <tr>
                <td><html:submit value="Send" /></td>
            </tr>
        </html:form>
    La balise <logic:iterate> affiche une case contenant le nom de la propriété et une case à cocher pour chaque élément de la Map 'categories', ça marche bien.

    Malheureusement, il me faudrait maintenant passer à deux niveaux d'itérations: pour chaque catégorie, je dois parcourir la liste des sections et afficher un deuxième niveau de cases à cocher.
    Je dois aussi pouvoir récupérer de façon claire les cases cochées par l'utilisateur, pour pouvoir faire les traitements nécessaire sur le serveur. Enfin, Il faudrait idéalement que je puisse gérer le fait que le fait de cocher/décocher la case de la catégorie provoque la sélection/désélection des sections dela catégorie... Mais bon, ça viendra bien plus tard, mon problème actuel est de savoir s'il y a un moyen pas trop tordu pour faire ma liste de sous-sections pour chaque section...

    Parmi les personnes qui m'auront compris, y en a-t-il une qui peut m'indiquer une piste de réflexion...

    Merci d'avance

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Re: [JSP] Liste de checkboxes 2 niveaux de hiérarchie dans f
    J'ai oublié de préciser qu'il s'agissait d'un projet réalisé sous Struts... Entretemps, j'ai entendu parler du taglib <nested:...>, et je recherche une doc à ce sujet...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bon, beh j'ai fini par trouver tout seul...
    <logic:iterate> permet d'itérer sur une collection, un Array ou un Map (HashMap, TreeMap, etc...).
    Dans le cas d'un Map, l'élément utilisé par la balise <logic:iterate> est un Map.Entry, qui a deux attributs: key et value.
    Dans mon cas, value retourne un HashMap, et je peux faire une seconde itération dessus...

    En bref, ça me donne ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <html:form action="/showReport" name="frmReport"
        type="package.ReportBean" method="get">
     
    <%-- 
    Itération sur le HashMap 'categories' qui est retourné par la méthode 'getCategories' de l'objet ReportBean. 
    L'objet sélectionné s'appelle 'category' et est de type Map.Entry, puisque l'itération est faite sur un Map (voir doc de logic:iterate) 
    --%>
        <logic:iterate name="reportBean" id="category" 
            property="categories">
            <tr>
                <td>
                    <B>
    <%-- Insertion de la valeur getKey() sur l'objet 'category' --%>
    <%-- il faut encore ajouter la checkbox --%>
                        <bean:write name="category" property="key" />
                    </B>
                </td>
            </tr>
            <tr>
    <%-- 
    Itération sur le HashMap qui est retourné par la méthode 'getValue' de l'objet Map.Entry 'category' issu de l'itération de niveau supérieur.  L'objet sélectionné s'appelle 'section'.
    --%>
                <logic:iterate name="category" id="section" property="value">
                    <tr>
                        <td>&nbsp;</td>
                        <td>
                            <html:multibox property="selectedItems">
                                <bean:write name="section" />
                            </html:multibox>
                            <bean:write name="section" />
                        </td>
                    </tr>
                </logic:iterate>
            </tr>
        </logic:iterate>
        <tr>
            <td><html:submit value="Send" /></td>
        </tr>
    </html:form>
    Voilà, il ne me reste plus qu'à ajouter du javascript à ce code, pour gérer la sélection/désélection des checkboxes de niveau supérieur/inférieur...
    J'espère que ce petit bout de code pourra aider quelqu'un, si ce n'est pas le cas il aura au moins eu le mérite de m'aider moi-même
    Bone journée à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] TreeView avec CheckBox à certain niveaux
    Par Maxsin dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/04/2006, 16h29
  2. JSP / liste de BLOB
    Par keopsk dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 30/03/2006, 10h43
  3. [JSP][Liste déroulante]
    Par andrau dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/08/2005, 09h42
  4. [JSP] liste de fichiers dans une appli web
    Par cyrso dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 21/01/2005, 17h17
  5. [JSP]Listes déroulantes
    Par asterix76-rouen dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 30/04/2004, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo