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

Struts 1 Java Discussion :

Checkbox dans listes imbriquées et rechargement de page


Sujet :

Struts 1 Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Par défaut Checkbox dans listes imbriquées et rechargement de page
    Bonjour tertous !

    Le problème du jour est le suivant :

    Dans mon application j'ai une série de check box. Ces dernières sont cloisonnées dans deux listes imbriquées.

    Visuellement on a


    Bon c'est une version de dev, la mise ne page est super pourrie.

    Le truc c'est qu'avec les boutons "Ajouter une cible" ou "ajouter une tranche horaire" je rajoute une ligne en haut ou en bas.

    Pour cela je recharge la page. J'ai dèrrière recréé un objet trancheHoraire ou cible.

    Le truc c'est que je voudrais que quand je coche la case, au rechargement elle le soit toujours. Pour le moment je perd les infos de cochage (et uniquement celle ci) quand j'ajoute une ligne...

    Les données à savoir :

    - Oui je suis bien en session, vu que le texte saisi reste quand j'ajoute une ligne
    - le code JSP incriminé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <nested:iterate property="listeHoraires" indexId="itt">
    	<tr>
    		<td><nested:text property="heureDeb" /></td>
    		<td><nested:text property="heureFin" /></td>
    		<nested:iterate property="periodes" indexId="ittPeriode" id="prds">
    			<td><nested:checkbox name="prds" property="flagActifIHM"/></td>
    		</nested:iterate>
    	</tr>
    </nested:iterate>
    J'ai toujours du mal avec ces checkbox, mais là je bloque pas mal

    J'ai fait pas mal de recherche sur le forum, je n'ai pas trouvé de problème similaire.

    Je suis également au courant du problème des checkbox et du resetCheckBox à mettre dans le reset, mais rien n'y fait.

    Merci de votre aide !

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Si tu es en J2EE 1.4 ou plus, le code suivant devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <nested:iterate property="listeHoraires" indexId="itt">
    <tr>
    	<td><nested:text property="heureDeb" /></td>
    	<td><nested:text property="heureFin" /></td>
    	<nested:iterate property="periodes" indexId="ittPeriode" id="prds">
    		<td><html:checkbox property="listeHoraires[${itt}].periodes[${ittPeriod}].flagActifIHM"/></td>
    	</nested:iterate>
    </tr>
    </nested:iterate>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Par défaut
    Ben ça marche pas super super. Pour ne pas dire pas du tout.

    Après tatonage et erreurs en tout genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <logic:iterate name="horaires" property="periodes" indexId="ittPeriode" id="prds">
    		<td><html:checkbox name="EditCibleActionForm" property="listeHoraires[${itt}].periodes[${ittPeriod}].flagActifIHM"/></td>
    </logic:iterate>
    avec toujours en sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    02/04/2009 12:57:55 [ERROR] - "Servlet.service()" pour la servlet action a généré une exception
    javax.servlet.jsp.JspException: Invalid argument looking up property: "listeHoraires[${itt}].periodes[${ittPeriod}].flagActifIHM" of bean: "EditCibleActionForm"

  4. #4
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Manifestement, les EL ne sont pas interprétées.
    Tu n'es donc pas en J2EE 1.4.
    Dans ce cas, il faut utiliser la tld struts-html-el.tld :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html-el:checkbox property="listeHoraires[${itt}].periodes[${ittPeriod}].flagActifIHM"/>
    sans oublier d'ajouter au début de la jsp la directive taglib qui pointe sur cette tld.

    ou alors tu peux utiliser une scriptlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:checkbox property="<%="listeHoraires["+itt+"].periodes["+ittPeriod+"].flagActifIHM"%>"/>

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Par défaut
    Je suis en java 1.5.

    Sinon j'ai creusé un peu plus.

    Et chose que tu ne pouvais ni voir ni deviner ma très chère c_nvy c'est que ma liste periodes etait une Hashset.

    Et Struts est pas fan.

    Une fois changé en collection. Ça va de suite beaucoup mieux.

    Sujet clos donc.

    Merci pour le coup de main !

  6. #6
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Je parlais de la version de J2EE et non de Java, ce qui n'est pas la même chose.

    Sinon, ça ne peut effectivement pas fonctionner avec une HashSet tout simplement parce qu'il n'existe pas de getter avec index sur une HashSet.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Par défaut
    Bonjour tertous !

    Après avoir résolu le problème de perte d'info sur les checkbox, je me heurte à une nouvelle perte d'info. Je ne crée donc pas de nouveau topic, car c'est dans la continuité.

    Reprenons l'image si vous le voulez bien :



    Aujourd'hui je m'attaque au bouton de suppression de ligne. J'ai deux choix qui s'offrent à moi :

    La balise image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:submit src="<%=buttonDelete%>" value="itt" onclick="javascript:delCible();" property="submit" />
    La balise link :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <nested:link action="editCible.do?todo=dropSousCible" paramName="Cible" paramProperty="idCibleIHM" paramId="idCibleIHM">
    	<img src="<%=buttonDelete%>" />
    </nested:link>
    Les données supplémentaires :

    Le javascript renseigne deux champs cachés. Ils me permettraient de connaitre la ligne à supprimer dans le cas de la balise image

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function delCible(value){
    	loading();
    	document.EditCibleActionForm.idToDel.value = value;
    	document.EditCibleActionForm.todo.value='dropSousCible';
    }
    Mais le truc c'est que chaque solution possède un gros problème !

    Pour l'image :

    Le javascript fait caca mou. Le code généré ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="image" name="submit" src="/AdmRoutageParc/gifs/b_drop.png" onclick="javascript:delCible(<%=itt.intValue() %>)">
    La balise <% %> n'est pas pris en compte !

    Pour le Link
    Le soucis c'est que c'est un lien, donc si pépère qui rempli son écran, ajoute 50 lignes et rempli ensuite, s'il utilise le lien pour supprimer une ligne il perd tout ce qu'il a rempli. Parceque comme c'est un lien les objets du form ne sont pas enregistrés.

    I need your help !

    Merci

  8. #8
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Et comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="javascript:delCible('<%=itt.intValue() %>');"

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Et comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="javascript:delCible('<%=itt.intValue() %>');"
    Non mais ceci marche !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:image src="<%=buttonDelete%>" onclick="<%="javascript:delCible("+itt.intValue()+")" %>" property="submit"></html:image>
    A noter quelque part parceque c'est pas la première fois que je me retrouvais confronter au problème ainsi identifié :

    Dans un onEvent, il ne faut pas mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="javascript:delCible(<%=itt.intValue() %>);"
    Car la balise <% %> ne sera pas interprété.

    Préférez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:image src="<%=buttonDelete%>" onclick="<%="javascript:delCible("+itt.intValue()+")" %>" property="submit" />
    Merci c_nvy, sans toi je n'aurai pas pensé à ça. Tu es ma muse, mon inspiration !

    Sur ce, bonne journée ! Et à lundi pour mon prochain problème du jour

  10. #10
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Effectivement, ça fonctionne mieux comme ça.
    En fait, je n'utilise plus les scriptlets depuis longtemps.
    Avec les EL, c'est tellement plus simple.

    D'ailleurs, à ce sujet, quel serveur d'applications utilises-tu et surtout quelle version ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Par défaut
    en local je suis avec tomcat (chez France Telecom, le parc informatique n'est pas très récent vaut mieux faire leger)

    En prod nous avons un bon vieux (JOnAS 4.3.5 - Tomcat 5.0.30)

    Pas super récent, mais vu le protocole à suivre pour le mettre à jour, je vais pas m'y risquer.

    Mais qu'appelles tu EL ? Si tu as une solution plus appropriée et plus propre à mon action ça m'intéresse.

  12. #12
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Avec une EL, ça donnerait tout simplement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="javascript:delCible('${itt}');"
    Pour plus d'infos sur les EL, voir le tutoriel d'adiGuba.
    Comme il est dit dans le tutoriel, pour pouvoir utiliser les EL :
    une application web J2EE 1.4 (Servlet 2.4 / JSP 2.0) est nécessaire
    ou alors, comme je te l'ai dit précédemment, si tu es en J2EE 1.3, tu peux utiliser la tld struts-html-el.tld pour que l'EL soit interprétée.

    Mais il me semble que la version 4 de JONAS et la version 5 de Tomcat fonctionnent en J2EE 1.4.
    Tu peux donc passer en J2EE 1.4.
    Pour cela, il suffit de modifier le début du web.xml comme suit :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    		xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    		version="2.4">

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

Discussions similaires

  1. Réécrire dans un div sans recharger la page
    Par Daviloppeur dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/05/2011, 17h07
  2. [PHP 5.0] checkbox dans liste
    Par jdavid dans le forum Langage
    Réponses: 6
    Dernier message: 26/03/2009, 12h14
  3. [javascript/html] Recharger une page après choix dans liste
    Par pitchoblack dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/04/2008, 16h58
  4. [javascript/php]Recharger une page après choix dans liste déroulante
    Par eyango dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/01/2008, 13h34
  5. Présentation dans des listes imbriquées
    Par Ghusse dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 29/09/2005, 09h35

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