Bonjour à tous !

J'ai besoin de votre aide pour celle là.
L'idée de base est plutôt simple: j'ai deux listes déroulantes, les options disponibles dans la seconde dépendent du choix dans la première.

Je n'ai pas la main sur la modèle de base de donnée.

J'envoi deux listes de données via un request dispatcher dans mon fichier Java:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
[...]
    List<ConfigSousType> listConfigSousType =  new ArrayList();
    List<ConfigType> listConfigType =  new ArrayList();
[...]
    String querySousType = "SELECT distinct colonne, idValeur FROM ConfigSousType";
    String queryType = "SELECT * FROM ConfigType";
[...]
    request.setAttribute("listConfigSousType",listConfigSousType);
    request.setAttribute("listConfigType",listConfigType);
 
    String nextJSP = "/addConfigSousType.jsp";
    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP)
[...]
Voici le modèle de données:

Première table "Type": nom, idType, valeur

Seconde table "SousType" : nom, idType, nomSousType, idSousType

Exemple:

Table Type
ColorCategory, 1, TheBlueColors
ColorCategory, 2, TheRedColors
FoodCategory, 1, TheTastyFood

Table SousType
ColorCategory, 1, DeepBlue, 1
ColorCategory, 1, LightBlue, 2
ColorCategory, 2, Crimson, 1
ColorCategory, 2, Scarlet, 2
FoodCategory, 1, Pizza

Je créé l'interface admin pour ajouter une ligne dans la seconde table.

Je veux que le première liste déroulante propose 'ColorCategory', 'FoodCategory'
Puis que sur la seconde, le choix soit filtrer selon la première.
Je choisis "ColorCategory" sur la première, la seconde propose "TheBlueColors", "TheRedColors"

Dans mon extrait de code, listConfigType contient toute la table (elle sera petite, moins de 100 lignes)
listConfigSousType contient un distinct : "ColorCategory , 1", "ColorCategory , 2", "FoodCategory, 1"

Dans mon JSP je le parcours comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
<select id ='name' required name='name'><br><br>
                    <c:forEach items="${listConfigSousType}" var="configSousType">
                        <option value="${configSousType.name}">${configSousType.name}</option>
                    </c:forEach>   
 </select>
=> J'ai deux problèmes:

- Sur la première liste déroulante, je vais me retrouver deux fois avec 'ColorCategory', il me faut un moyen de ne pas avoir de doublon.
- Et surtout comment suis-je sensé générer les options de la seconde liste déroulante ?
Je dois sûrement faire quelque chose dans un bout de Javascript sur un OnChange mais je ne vois pas comment l'articuler et je suis coincé.


En complément, pour afficher le libellé par rapport au idType dans ma page d'affichage je procède ainsi :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
    <label for='value'>Valeur </label>              
    <input id ='value' type='text' name='value' 
    <c:forEach items="${listConfigType}" var="configType">
        <c:if test="${configType.name == configSousType.name && configType.idType == configSousType.idType}">
            value="${configType.value}"><br><br>
        </c:if>
    </c:forEach>
Merci à vous si vous êtes arrivés jusqu'ici, j'espère que vous pourrez me décoincer