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

JSF Java Discussion :

ArgumentError avec ma Combo Box


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Par défaut ArgumentError avec ma Combo Box
    Bonjour,

    Je suis actuellement en train de développer un workflow à l'aide de jBoss jBPM mais je suis confronté à une erreur avec JSF que je n'arrive pas à corriger, ca fait 2 jours que je suis dessus et je commence à désespérer.

    Voilà, j'essaye de créer une combo box contenant les noms d'une table de ma base de données MySQL. Seulement j'ai un problème d'argument.

    Voici donc les différentes parties de mon code puis le message d'erreur en espérant que vous saurez me décoincer

    Voici la partie de mon formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        <jbpm:datacell>
     
          <f:facet name="header">
            <h:outputText value="Produit desire: "/>
          </f:facet>
     
    	  <h:selectOneMenu value="#{genList.value}">
    	  	<f:selectItems value="#{genList.items}" />
    	  </h:selectOneMenu> 
     
        </jbpm:datacell>
    Voici ensuite mon genList.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
    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
     
    public class genList {
     
    	private String value="";
    	private Connection conn;
     
    	public genList() {}
     
    	public String getValue() {
    		return value;
    	}
    	public void setValue(String value) {
    		this.value = value;
    	}
     
    	public Collection getItems() {
     
    		Collection items = new ArrayList();
    		SelectItem si = null;
     
    		try{
    			//-- Connexion
    		    Class.forName("com.mysql.jdbc.Driver");
    		    conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/databaseName", "root", " ");
     
    		    //-- Creation du statement et de la requete
    		    Statement stmt = conn.createStatement();
    		    String requete = null;
    		    requete = "SELECT ID_,NOM_ FROM materiel";
     
    		    //-- Execution de la requete
    		    ResultSet rs = stmt.executeQuery(requete);
     
    		    //-- Lecture des donnees
    		    while (rs.next())
    		    {
    		    	si = new SelectItem (String.valueOf(rs.getInt(1)), rs.getString(2));
    		    	items.add(si);
    		    }
     
    		    //-- Deconnexion
    		    conn.close();
    		} catch(Exception e){
    		    System.out.println("\n\n\nCONNEXION ECHOUEE: "+e+"\n\n\n");
    		    System.exit(-1);  
    		}
     
    		return items;
    	}
    }
    Voici ce que j'ai créé dans le Face Config (c'est tout ce que j'ai fais dans ce fichier) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <managed-bean>
          <managed-bean-name>genList</managed-bean-name>
          <managed-bean-class>com.demande.action.genList</managed-bean-class>
          <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    Et finalement voici l'erreur que j'ai :

    Argument Error: An option for component j_id48 was not an instance of javax.faces.model.SelectItem. Type found: java.util.ArrayList.

    (j_id48 étant le nom donné automatiquement à ma combo box.)

    Je ne comprends pas pourquoi cette erreur est présente et si l'un d'entre vous est capable de m'aider, j'en serais très reconnaissant.

    Merci pour votre attention et votre aide,

    Richard T.

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    Je ne suis pas sûr d'avoir trouvé d'où provient cette erreur, mais tu peux toujours essayer de faire ces changements :
    • Utiliser les collections génériques de Java 5.0+ (si c'est possible)
    • Utiliser List<SelectItem> comme type de retour de getItems
    Ton code devient alors :
    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
    public List<SelectItem> getItems() {
    		
    		List<SelectItem> items = new ArrayList<SelectItem>
    ();
    		SelectItem si = null;
    		
    		try{
    			//-- Connexion
    		    Class.forName("com.mysql.jdbc.Driver");
    		    conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/databaseName", "root", " ");
    		   
    		    //-- Creation du statement et de la requete
    		    Statement stmt = conn.createStatement();
    		    String requete = null;
    		    requete = "SELECT ID_,NOM_ FROM materiel";
     
    		    //-- Execution de la requete
    		    ResultSet rs = stmt.executeQuery(requete);
     
    		    //-- Lecture des donnees
    		    while (rs.next())
    		    {
    		    	si = new SelectItem (String.valueOf(rs.getInt(1)), rs.getString(2));
    		    	items.add(si);
    		    }
    		    
    		    //-- Deconnexion
    		    conn.close();
    		} catch(Exception e){
    		    System.out.println("\n\n\nCONNEXION ECHOUEE: "+e+"\n\n\n");
    		    System.exit(-1);  
    		}
    		
    		return items;
    	}
    Voilà.

    P.S. : remarques que tu ne respectes aucunement le MVC dans ton code. Ce dernier est aussi non performant dans le sens où tu devrais te reconnecter à la base, y effectuer une requete et parcourir tous les enregistrements du résultat, et ce à chaque affichage de ta page ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Par défaut
    Merci de ta réponse,

    J'ai toujours la même erreur

    Pour ce qui est de la "performance" du code, ce n'est pas ce que je recherche pour le moment, j'essaye simplement de faire fonctionner cette combo box. Une fois de plus j'obtient le même message d'erreur qui est :

    Argument Error: An option for component j_id48 was not an instance of javax.faces.model.SelectItem. Type found: java.util.ArrayList.

  4. #4
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    T'es sur qu'aucune exception ne se produit avant ? je parles notamment des exceptions de JDBC ... peux tu s'il te plaît donner le StackTrace de l'exception ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Par défaut
    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
     
    java.lang.IllegalArgumentException: Argument Error: An option for component j_id48 was not an instance of javax.faces.model.SelectItem.  Type found: java.util.ArrayList.
    	at com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:336)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:644)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:762)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:304)
    	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:829)
    	at org.jbpm.webapp.tag.jbpm.ui.ComponentBase.doEncode(ComponentBase.java:48)
    	at org.jbpm.webapp.tag.jbpm.ui.ComponentBase.doEncode(ComponentBase.java:45)
    	at org.jbpm.webapp.tag.jbpm.ui.DataForm.renderCells(DataForm.java:117)
    	at org.jbpm.webapp.tag.jbpm.ui.DataForm.encodeChildren(DataForm.java:95)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:890)
    	at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
    	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:810)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
    	at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
    	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:810)
    	at org.jbpm.webapp.tag.jbpm.ui.ComponentBase.doEncode(ComponentBase.java:33)
    	at org.jbpm.webapp.tag.jbpm.ui.ComponentBase.doEncode(ComponentBase.java:58)
    	at org.jbpm.webapp.tag.jbpm.ui.Tab.encodeChildren(Tab.java:112)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:890)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:890)
    	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:578)
    	at org.jbpm.webapp.application.JbpmViewHandler.renderView(JbpmViewHandler.java:58)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)
    	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.jbpm.webapp.filter.LogFilter.doFilter(LogFilter.java:59)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
    	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    	at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
    	at java.lang.Thread.run(Thread.java:595)
    Voilà monsieur, en espérant que tu puisse m'aider. Encore merci pour ton aide

  6. #6
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    De rien, nous sommes là pour s'entraider.

    Bizarre ton problème.
    On va donc faire un peu de débogage pour voir ...
    ajoutes ceci juste avant return items :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      :
      :
      :
     
      for(SelectItem s : items){
        System.out.println(s);
      }
     
      return items;
    }
    pour voir ce que contient la liste.
    Normalement, ça devrait declencher une exception.

Discussions similaires

  1. Combo box avec deux liste en simultané
    Par olibara dans le forum Windows Forms
    Réponses: 0
    Dernier message: 22/01/2010, 13h33
  2. Combo box avec cellule liée
    Par andy38 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/06/2008, 10h38
  3. Problème de combo box avec additem
    Par Mariquiqui dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/04/2008, 19h25
  4. [ Requete ] effectuer une requete avec la valeur d'un combo box
    Par Jeremie_Vi dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 28/06/2006, 15h36
  5. Problème avec addString() de combo-box
    Par Midou dans le forum MFC
    Réponses: 2
    Dernier message: 19/02/2006, 21h51

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