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 :

Changer une variable JSTL


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut Changer une variable JSTL
    Salut a tous,

    Voila je débute sur la techno jstl et j ai un petit souci avec.

    Tout d abord voici mon code

    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
    <c:forEach items="${ nodes }" var="nodes" varStatus="boucle" begin="0" end="0">
                <form>
                <c:set var="cursor" value="${nodes }" scope="request"></c:set>
    	                <c:out value="Cursor de base = "></c:out>
                		<c:out value="${requestScope.cursor.getQuestion() }"></c:out>
                		<br>
                <c:choose >
     
    	            <c:when test="${not empty nodes.getQuestion() }">
     
    	                <c:if test="${param.btn eq 'Oui'}" var="oui">
    	                	<c:set var="cursor" value="${nodes.getLeftnode() }" scope="request"></c:set>
    	                	<c:out value="Si tu reponds oui = "></c:out>
    	                	<c:out value="${requestScope.cursor.getQuestion() }"></c:out>
    	                </c:if>
    	                <br>
     
    	                <c:if test="${param.btn eq 'Non'}" var="non">
    	                	<c:set var="cursor" value="${nodes.getRightnode() }" scope="request"></c:set>
    	                	<c:out value="Si tu reponds non = "></c:out>
    	                	<c:out value="${requestScope.cursor.getQuestion() }"></c:out>
    	                </c:if>
    	                <br>
     
     
     
    	             </c:when>
     
                </c:choose>
    Sur le cursor de base qui est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:set var="cursor" value="${nodes }" scope="request"></c:set>
    Il n'y a aucun souci.

    Mon problème est que je voudrais modifier CETTE variable la pour qu'a chaque fois que l utilisateur clique sur "oui", le programme affiche une autre question ... et encore une autre et ainsi de suite jusqu’à la fin du programme.

    Donc pour cela, j ai fait une boucle qui dit que "tant qu'il y a des questions, tu me vérifie les deux conditions".
    Ce qui fait ceci pour le "oui"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <c:if test="${param.btn eq 'Oui'}" var="oui">
    	                	<c:set var="cursor" value="${nodes.getLeftnode() }" scope="request"></c:set>
    	                	<c:out value="Si tu reponds oui = "></c:out>
    	                	<c:out value="${requestScope.cursor.getQuestion() }"></c:out>
    	                </c:if>
    Le souci c est qu'il "descend" une seul fois, il ne descend pas plus bas dans l'arbre. Je pense que c est la ligne du "set" qui pose problème mais je ne sais pas comment l écrire !

    En gros, le code écrit en dur devrais ressembler a cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:set var="cursor" value="${nodes.getLeftnode().getLeftnode() }" scope="request"></c:set>
    .

    Ici, ça me donnerais la 2e question et pour avoir la 3e question, il faudrait ajouter un 3e "getLeftnode()" et ainsi de suite

    J'avais déjà fait ce programme en java et ça faisait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(clavier_question.equals("yes"))
    		        {
    		           cursor = cursor.getLeftnode();
    		        }
    Merkiiii

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    un truc dans ce gout là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:set var="cursor" value="${cursor.getLeftnode() }" scope="session"></c:set>
    En gros tu te doit de réutiliser la dernier cursor. Pour ça, il te faut le stocker ailleurs que dans le request scope, où il disparait très vite.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut
    Merci pour ta réponse, mais sa ne marche pas

    voila ce que j ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <c:if test="${param.btn eq 'Oui'}" var="oui">
     
    	                	<c:set var="cursor" value="${nodes }" scope="session"></c:set>
    	                	<c:set var="cursor" value="${cursor.getLeftnode() }" scope="session"></c:set>
    	                	<c:out value="Si tu reponds oui = "></c:out>
    	                	<c:out value="${sessionScope.cursor.getQuestion() }"></c:out>
    	                </c:if>
    	                <br>
    J ai bien mis un scope session, je l affiche et ça me donne le même résultat qu avant.

    Pour donner un exemple simple, j ai une question principale qui est "êtes vous un être vivant", une 2e question "êtes vous un homme" et une 3e question qui sera "êtes vous européen".

    Pour l instant il me pose normalement la 1er question et si je réponds oui, il me propose bien la 2e question mais si je clique encore sur "oui", il ne me propose pas la 3e question.

    En fait je pense que mon problème vient de la variable, il n arrive pas a rajouter un 2e "getLeftnode()". Il doit rester bloquer sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:set var="cursor" value="${cursor.getLeftnode() }" scope="session"></c:set>
    et par conséquent s arrete a la 2e question

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par biohazard401 Voir le message

    J ai bien mis un scope session, je l affiche et ça me donne le même résultat qu avant.
    Ben oui, puisque t'as mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:set var="cursor" value="${nodes }" scope="session"></c:set>
    juste avant, tu retombe à 0 à chaque fois, puis t'incrémente de 1. Tu dois pas repasser à 0 justement. Cette ligne là elle va dans le else

    C'est pas parce que c'est du JSTL que la logique booléenne a tout d'un coup changé. Si j'initialise un truc puis que j'avance d'un cran, ben je serais à un cran, pas à 2 ou 3 ou 4 ^^

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut
    Déja merci pour ta réponse et oui effectivement je ne sais pas ce que j ai foutu sa ne pouvais pas marcher

    Mais en modifiant la petite boulette, ça ne résolue pas mon probleme

    Voici mon code complet
    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
    <c:forEach items="${ nodes }" var="nodes" varStatus="boucle" begin="0" end="0">
            <c:set var="cursor" value="${nodes }" scope="session"></c:set>
                <form>
                <c:choose >
    	            <c:when test="${not empty cursor.getQuestion() }">
    	                <c:if test="${param.btn eq 'Oui'}" var="oui">
    	                	<c:set var="cursor" value="${cursor.getLeftnode() }" scope="session"></c:set>
    	                	<c:out value="Si tu reponds oui = "></c:out>
    	                	<c:out value="${cursor.getQuestion() }"></c:out>
    	                </c:if>
    	                <br>
    	                <c:if test="${param.btn eq 'Non'}" var="non">
    	                	<c:set var="cursor" value="${cursor.getRightnode() }" scope="session"></c:set>
    	                	<c:out value="Si tu reponds non = "></c:out>
    	                	<c:out value="${cursor.getQuestion() }"></c:out>
    	                </c:if>
    	                <br>
    	                <c:out value="Cursor apres le if  = "></c:out>
                		<c:out value="${cursor.getQuestion() }"></c:out>
                		<br>
    	             </c:when>
                </c:choose>
    j initialise bien ma variable hors du if (effectivement c est mieux ^^), et je fais même un affichage après la boucle pour voir comment sort ma variable du if.

    Quand la variable n est pas encore rentrer dans la boucle, dans "cursor après le if", la variable est bien la première question donc "cursor.getQuestion()".

    Ensuite quand je clique sur "oui", la variable après le if prend bien la 2e question soit "cursor.getLeftnode().getQuestion()". Mais quand je repasse une 3e fois dans la boucle, la variable n évolue pas alors qu elle devrais être "cursor.getLeftnode()..getLeftnode().getQuestion()".

    merki

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            <c:set var="cursor" value="${nodes }" scope="session"></c:set>
    Tu continue à le faire dans chaque requete http. Le fait de l'avoir sortis du if ne change rien. Comme je l'ai dit, ca doit aller dans le else.

    Après quel est le but du foreach? Parce que là si tu doit gérer N nodes et pas un par page, c'est complètement différent. Tu as N lignes qui s'affichent et tu met un bouton next / previous pour faire bouger les lignes individuellement? Qu'est-ce que tu essaie de faire? Parce que ce mélange avec une bouche et un when dedans, ça m'a l'air suspect

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/04/2010, 11h22
  2. Réponses: 1
    Dernier message: 13/06/2008, 11h30
  3. changer une variable d'environnement a partir d'un script
    Par doomxl dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 28/06/2007, 13h08
  4. [JSTL] Récupérer une variable JSTL pour l'utiliser avec JSP
    Par pitit777 dans le forum Taglibs
    Réponses: 3
    Dernier message: 28/03/2006, 09h47
  5. Changer une variable $_SESSION -> Formulaire
    Par Nadd dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2006, 23h37

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