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 :

ActionForm et plusieurs checkbox


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut ActionForm et plusieurs checkbox
    Bonjour, dans une liste de pointage non valide, chacune possède un chekbox, le chef du projet choisit l'ensemble de pointages qu'il veut valider puis il valide le formulaire, j'ai trouvé une discussion sémilaire http://www.developpez.net/forums/sho...=list+checkbox, mais j'ai un petit problème : id de mon pointage il est de type long et je suis obligée de déclaré un tableau de string lorsque je fais au niveau metier ma methode update, il me retrourne une erreur parce que l'id est Long est non pas string, je vous présente ce que j'ai fais :

    Form :
    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
     	private String[] selectedIdp;
     
    	public String[] getSelectedIdp() {
    		return selectedIdp;
    	}
     
    	public void setSelectedIdp(String[] selectedIdp) {
    		this.selectedIdp = selectedIdp;
    ...
    	public void reset(ActionMapping mapping, HttpServletRequest request) {
     
    		this.nomJour="";
    		this.selectedRessource = 1;
    		this.selectedIdp = new String[8];
    	}
    Dans ma jsp :
    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
    <%int nb=0; %>
      <table width="100%">
      <logic:iterate id="ptg" name="pgf" property="pointages">
     
      <tr
      <%if(nb==0){%> bgcolor="EEF3FA" <% nb=1;} else {%> bgcolor="C1DAEC" <% nb=0;} %>>
      		<td  width="65" align="center"><html:multibox property="selectedIdp"><bean:write name="ptg" property="idPointage"/></html:multibox></td>
      		<td  width="205"><bean:write name="ptg" property="tache.projet.intituleProjet"/></td>
      		<td  width="205"><bean:write name="ptg" property="tache.libelleTache"/></td>
      		<td  width="270" align="center"><html:textarea property="motifRejet"/></td>
      		<td  width="80" align="center"><bean:write name="ptg" property="dureeTache"/></td>
     
      		</tr>
      		</logic:iterate>	
    </table>
    ma méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public void updateStatut(Long idp){
        	Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		session.beginTransaction();
    		Pointage point = (Pointage) session.load(Pointage.class, idp);
     
    		point.setStatut("Valide");
    		session.getTransaction().commit();
        }
    mon action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    else if(pgf.getAction().equals("Enregistrer")){
     
    			int i;
    			String[] listeid = pgf.getSelectedIdp();
    			for(i=0;i<=8;i++){
    				if(listeid[i] != null){
    					gpg.updateStatut(listeid[i]);
    				}
    			}
    		}
    Merci pour 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
    Fais un test avec un tableau de Long dans l'ActionForm.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    Merci c_nvy j'ai fait exactement ca , il m'appelle correctement la méthode mais il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		else if(pgf.getAction().equals("Enregistrer")){
     
    			int i;
    			Long[] listeid = pgf.getSelectedIdp();
    			System.out.println(pgf.getSelectedIdp());
    			for(i=0;i<=30;i++){
    				if(listeid[i] != null && i<listeid.length){
    					gpg.updateStatut(listeid[i]);
    				}
    			}
    		}
    sachant que dans le form j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.selectedIdp = new Long[30];
    , j'ai compris que je dépasse les bornes de mon tableau mais comment puis je résoudre ca sachant que 10 element ca me suffit ?

  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
    Dans l'ActionForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.selectedIdp = new Long[0];
    et dans l'Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    		else if (pgf.getAction().equals("Enregistrer"))
    		{ 
    			Long[] listeid = pgf.getSelectedIdp();
    			System.out.println(pgf.getSelectedIdp());
    			for(int i=0;i<listeid.length;i++)
    			{
    				gpg.updateStatut(listeid[i]);
    			}
    		}
    Attention, dans listeid, tu n'auras que les id cochés.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    Attention, dans listeid, tu n'auras que les id cochés
    c'est ce que je veux exactement, merci infiniment c_nvy t'es la meilleure

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    Bonjour, je reviens vers vers c_nvy, malheureusement, j'aurais besoin aussi des pointages qui ne sont pas séléctionné, parce que je met une liste de pointage qui m'affiche certains informations, le chef de projet choisit les pointages a valider(ce qu'on a fait en haut) et ceux ceux qui n'ont été pas choisi(rejetées), le chef de projet doit signalé le motif de rejet, je vous demande est ce que je vais créer la meme chose mais cette fois ci avec un tableau de string, mais au lieu de que dois je faire pour un tableau de string, moi j'utilise ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:textarea property="motifRejet"/>
    c'est ce textarea que dois rempli le chef de projet que j'initialise toujours a :
    "Pas vu"

  7. #7
    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
    Tu peux effectivement définir la propriété motifRejet de type String[] dans l'ActionForm, ajouter l'attribut indexId dans le tag logic:iterate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      <logic:iterate id="ptg" name="pgf" property="pointages" indexId="index">
    et coder le html:textarea comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:textarea property="motifRejet[${index}]"/>

  8. #8
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    il me retourne ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invalid indexed property 'refusedPointage[${index}]'
    ,

    voila ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      <logic:iterate id="ptg" name="pgf" property="pointages"  indexId="index">
     
      <tr
      <%if(nb==0){%> bgcolor="EEF3FA" <% nb=1;} else {%> bgcolor="C1DAEC" <% nb=0;} %>>
      		<td  width="65" align="center"><html:multibox property="selectedIdp"><bean:write name="ptg" property="idPointage"/></html:multibox></td>
      		<td  width="205"><bean:write name="ptg" property="tache.projet.intituleProjet"/></td>
      		<td  width="205"><bean:write name="ptg" property="tache.libelleTache"/></td>
      		<td  width="270" align="center"><html:textarea property="refusedPointage[${index}]"/></td>
      		<td  width="80" align="center"><bean:write name="ptg" property="dureeTache"/></td>
     
      		</tr>
      		</logic:iterate>
    mais est ce que je vais faire la meme chose pour l'appelle de la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    			int i;
    			Long[] listeid = pgf.getSelectedIdp();
    			String[] listemot = pgf.getRefusedPointage();
    			//System.out.println(listemot.length);
    			//System.out.println(listeid.length);
     
    			for(i=0;i<listeid.length;i++)
    			{
    				gpg.updateStatut(listeid[i]);
    				gpg.updateMotifParId(listeid[i], listemot[i]);
    			}
    		}
    avec : cette méthode update uniquement les pointages qui ne sont pas séléctionné qui doit récupéré les motifs rejet puis les metter a jourdans la base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public Query updateMotifParId(Long idp, String mot){
        	Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		session.beginTransaction();
    		return session.createQuery("update Pointage p set p.motifRejet=:x where p.idPointage<>:y").setParameter("x", mot).setParameter("y", idp);
        }
    Dans mon form j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String[] refusedPointage;
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.refusedPointage = new String[30];
    Le textarea c'est une valeur que le chef de projet va saisir,
    Merci pour vos effort

  9. #9
    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
    Peux-tu montrer le web.xml pour vérifier en quelle version de J2EE tu es ?
    Peux-tu aussi préciser quel serveur d'application tu utilises et sa version ?

  10. #10
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    le voila :

    web.xml :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
      "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
    <web-app>
      <display-name>Struts Examples Application</display-name>
      <!-- Standard Action Servlet Configuration (with debugging) -->
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>2</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
      </servlet>
      <!-- Standard Action Servlet Mapping -->
      <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
     
      <!-- Struts Tag Library Descriptors -->
      <taglib>
        <taglib-uri>/tags/struts-bean</taglib-uri>
        <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
      </taglib>
      <taglib>
        <taglib-uri>/tags/struts-html</taglib-uri>
        <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
      </taglib>
      <taglib>
        <taglib-uri>/tags/struts-logic</taglib-uri>
        <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
      </taglib>
      <taglib>
        <taglib-uri>/tags/struts-nested</taglib-uri>
        <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
      </taglib>
      <taglib>
    	<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
    	<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
      </taglib> 
     
        <taglib>
    	<taglib-uri>/WEB-INF/struts-menu.tld</taglib-uri>
    	<taglib-location>/WEB-INF/struts-menu.tld</taglib-location>
      </taglib> 
          <welcome-file-list>        
            <welcome-file>vues/index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    j'utilise Tomcat5.5

  11. #11
    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 la version 5.5 de Tomcat, tu peux modifier le web.xml pour être en J2EE 1.4 (Servlet 2.4/JSP 2.0).

    Remplace donc les deux lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
      "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
    <web-app>
    par celle-ci :
    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">
    Ainsi, l'EL ${index} sera bien interprétée et tu ne devrais plus avoir le message d'erreur suivant :
    Invalid indexed property 'refusedPointage[${index}]'

  12. #12
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    Merci c_nvy, maintenant il m'affiche plus le message, mais j'ai un petit problème comme je t'ai signalé en haut :

    Le chef de projet doit choisir les tache a valider je les recupère (uniquement ceux coché) et je mettre a jour, mainetnant ce que je veux faire c'est :

    pour ceux qui ne sont pas coché le chef de projet va saisir le motif de rejet, et je dois les laisser comme des non valide mais le consultant comprendra pourquoi il ne sont pas validé par son chef de projet, c'est ce que je veux faire avec le text area,

    mais lorsque je fais :
    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
     
    		else if(pgf.getAction().equals("Enregistrer")){
     
    			int i;
    			Long[] listeid = pgf.getSelectedIdp();
    			String[] listemot = pgf.getRefusedPointage();
    			//System.out.println(listemot.length);
    			//System.out.println(listeid.length);
     
    			for(i=0;i<listeid.length;i++)
    			{
    				gpg.updateStatut(listeid[i]);
    				gpg.updateMotifParId(listeid[i], listemot[i]);
    				System.out.println(listemot[i]);
    			}
     
    		}
    listeid : contient uniquement ceux coché, donc si aucune tache n'a été validé ce tabelau va être vide, donc je passe pas à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gpg.updateMotifParId(listeid[i], listemot[i]);
    , cette méthode modifié le motifs de rejet pour les enregitrement dont le id est différents de listemot[i]);

    Comment puis je faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public Query updateMotifParId(Long idp, String mot){
        	Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		session.beginTransaction();
    		return session.createQuery("update Pointage p set p.motifRejet=:x where p.idPointage<>:y").setParameter("x", mot).setParameter("y", idp);
        }

  13. #13
    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
    Dans l'Action qui s'exécute au submit du formulaire, tu récupères le tableau de String refusedPointage contenant les motifs de rejet.
    Ensuite, tu récupères la liste pointages, tu itères dessus et pour chaque motif de rejet renseigné, tu récupères l'id et tu mets à jour la base.

    ça devrait donner quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    String[] listemot = pgf.getRefusedPointage();
    List pointages = pgf.getPointages() ;
    for (int i=0; i<pointages.size(); i++)
    {
       Pointage pointage = (Pointage) pointages.get(i) ;
       if ( listemot[i].length > 0 && listemot[i] != null )
       {
         gpg.updateMotifParId(pointage.getIdPointage(), listemot[i]);
       }
    }
    J'ai supposé que pointages était un objet de type List et que c'était une liste d'objets Pointage ayant pour propriété idPointage.
    Il faut bien sûr adapter ce code à ton cas.

  14. #14
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    Merci beacoup c_nvy ca marche NICKELLLLLLLLLLLLLLLLLLLLL

    j'aimerais bien que tu m'explique ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    refusedPointage[${index}]
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <logic:iterate id="ptg" name="pgf" property="pointages" indexId="index">
    pour indexId

  15. #15
    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
    La variable index spécifiée dans l'attribut indexId du tag logic:iterate contient l'index de l'élément courant de la liste.

    Donc, quand tu itères sur la liste via un logic:iterate, en codant refusedPointage[${index}], l'EL ${index} est remplacée par l'index de l'élément courant de la liste, soit pour la première ligne refusedPointage[0], pour la deuxième refusedPointage[1], etc..., ce qui te permet de mettre à jour le tableau refusedPointage[].

  16. #16
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    C'est compris, Mille merci

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

Discussions similaires

  1. [VB.NET] plusieurs checkbox plusieurs events
    Par b_lob dans le forum Windows Forms
    Réponses: 5
    Dernier message: 02/05/2006, 12h23
  2. [Tableaux] Envoyer plusieurs checkboxes
    Par jfjava2002 dans le forum Langage
    Réponses: 8
    Dernier message: 14/03/2006, 18h06
  3. récupérer données de plusieurs checkbox
    Par themis121 dans le forum Langage
    Réponses: 46
    Dernier message: 28/11/2005, 16h30
  4. Comment cocher/décocher plusieurs "checkbox"?
    Par Crazynoss dans le forum ASP
    Réponses: 2
    Dernier message: 15/05/2005, 23h38
  5. Cochage de plusieurs checkbox
    Par licorne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/03/2005, 10h30

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