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 :

Remplir un selectOneMenu à partir d'une BD MySql


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut Remplir un selectOneMenu à partir d'une BD MySql
    Bonjour,

    j'ai une liste déroulante que je veux remplir via une base de donnée.est ce que quelqu'un a une idée là dessus,merci

    je vous montre 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    public class inserer {
    public List getmaliste()
    {
    	ArrayList unelist = new ArrayList();
     
        try { 
        	Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
    		 String serverName = "localhost";
    		    String mydatabase = "test";
    		    String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
    			 String user = "root"; 
     
    	     String pass = "masta";
     
     
    	     java.sql.Connection connection = DriverManager.getConnection(url, user, pass);
    			     Statement instruction = ((java.sql.Connection) connection).createStatement();
     
     
     
    			     String sql = "  select  * from test.structure     " ;    
    					ResultSet resultat  = (ResultSet) instruction.executeQuery(sql);
     
    					while(resultat.next()){
     
    						String num=resultat.getString("nom").toString();
    						unelist.add(num);
     
    					}
            //session.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
     
        return (List) unelist;
    }
    }
    et la partie de page jsp 
     
    <h:selectOneMenu style="width: 155px; " value="#{inserer.}">
    <f:selectItems value="#{inserer.}" />   
     </h:selectOneMenu>
    mais je ne sais pas comment faire

  2. #2
    Membre actif Avatar de mr1azl
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 77
    Par défaut
    est ce que tu as déclaré ton bean inserer dans faces-config?
    ta liste doit être du type et n'oublie pas de mettre ses getter et setter

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    Citation Envoyé par mr1azl Voir le message
    est ce que tu as déclaré ton bean inserer dans faces-config?
    ta liste doit être du type et n'oublie pas de mettre ses getter et setter

    non je n'ai pas declarer la liste dans faces-config

    est ce que tu peux me faire un exemple je n'arrive pas a trouver solution

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    On ne déclare pas sa liste dans le faces-config.xml, mais le bean qui le propose (dans ton cas inserer). Cette déclaration permet à JSF de savoir que quand tu écris inserer dans tes pages JSF, cela fait référence à telle classe Java. Tu peux jeter un oeil dans la FAQ si tu veux savoir comment déclarer un bean...

    A noter aussi que le nom des classes Java doivent être capitalisés, par convention. Elle devrait donc s'appeller Inserer et non inserer).

    Sinon, pour ta question. On écrit une liste de sélection comme ceci :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:selectOneMenu value="#{monBean.maValeur}">
        <f:selectItems value=#{monBean.mesElements}"/>
    </h:selectOneMenu>

    monBean.maValeur contient l'ID de l'élément que l'utilisateur a choisi, et monBean.mesElements est la méthode (getter) qui va retourner une List<SelectItem> des choix possibles offerts à l'utilisateur. Un SelectItem est tout simplement un couple (clé, valeur). Et justement, monBean.maValeur doit prendre l'une de ces clés possibles.

    Dans le code Java, ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private String maValeur; // getter + setter
    private List<SelectItem> mesElements;
     
    public List<SelectItem> getMesElements() {
        if (mesElements == null) {
            mesElements = new ArrayList<SelectItem>();
            for (MonObjet obj : retrieveElementsFromDB()) {
                mesElements.add(new SelectItem(obj.getId(), obj.getLabel()));
            }
        }
        return mesElements;
    }
    On pourra noter plusieurs choses ici :

    • Je teste si mesElements sont à null ou pas, ce qui me permet d'initialiser ma liste de SelectItem qu'une seule fois, car JSF peut (et va) appeler mon getMesElements plusieurs fois durant le cycle de vie de ma requête. Sans cela, je vais faire appel plusieurs fois à ma BD (ou mon cache) pour récupérer mes éléments !
    • La méthode retrieveElementsFromDB() est en réalité censée appelée une couche service qui me fournira la liste des éléments depuis la BD. Il est généralement très mauvais de faire appel à la BD directement depuis un bean!

    Voilà, j'espère que maintenant c'est plus clair !
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    merci pour l'explication mais pas encore je n'arrive pas je vous montre le 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
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.faces.model.SelectItem;
     
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.ResultSet;
    import com.mysql.jdbc.Statement;
     
     
    public class monBean {
    	private String maValeur; // getter + setter
    	private List<SelectItem> mesElements;
    	public String getMaValeur() {
    		return maValeur;
    	}
    	public void setMaValeur(String maValeur) {
    		this.maValeur = maValeur;
    	}
    	public List getmaliste()
    	{
    		ArrayList unelist = new ArrayList();
     
    	    try { 
    	    	Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
    			 String serverName = "localhost";
    			    String mydatabase = "test";
    			    String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
    				 String user = "root"; 
     
    		     String pass = "masta";
     
     
    		     java.sql.Connection connection = DriverManager.getConnection(url, user, pass);
    				     Statement instruction = (Statement) ((java.sql.Connection) connection).createStatement();
     
      String sql = "  select  * from test.structure     " ;    
    ResultSet resultat  = (ResultSet) instruction.executeQuery(sql);
     
    while(resultat.next()){
     
    String num=resultat.getString("nom").toString();		
    unelist.add(num);
     
    						}
    	        //session.close();
    	    } catch (Exception e) {
    	        e.printStackTrace();
    	    }
     
    	    return (List) unelist;
    	}
     
     
    	public List<SelectItem> getMesElements() {
    		 if (mesElements == null) {
    		        mesElements = new ArrayList<SelectItem>();
    		        for (MonObjet obj : retrieveElementsFromDB()) {
    		            mesElements.add(new SelectItem(obj.getId(), obj.getLabel()));
    		        }
    		    }
    		    return mesElements;
    	}
    	public void setMesElements(List<SelectItem> mesElements) {
    		this.mesElements = mesElements;
    	}
     
     
     
     
     
    }
    comment remplir la liste par champ "num" de la table .structure

  6. #6
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bah tu y es presque. Il faut modifier ton code de getMesElements():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public List<SelectItem> getMesElements() {
             if (mesElements == null) {
                    mesElements = new ArrayList<SelectItem>();
                    for (String val : getMaListe()) {
                        mesElements.add(new SelectItem(val, val));
                    }
                }
                return mesElements;
        }
    et dans le code XHTML :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:selectOneMenu value="#{monBean.maValeur}">
        <f:selectItems value="#{monBean.mesElements}"/>
    </h:selectOneMenu>

    Quelques autres points :

    La convention veut que tu appelles ta méthode getMaListe() et non getmaListe(). La casse est importante !
    Autre chose, cette méthode serait mieux comme méthode private plutôt que public. Elle serait encore mieux dans une couche service ou DAO, mais bon

    Enfin, tu peux supprimer la méthode setMesElements, car elle ne sera jamais appelée par JSF. Ce dernier n'a besoin que du getter pour la propriété mesElements.
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    voila le modification de la class
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.faces.model.SelectItem;
     
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.ResultSet;
    import com.mysql.jdbc.Statement;
     
     
    public class monBean {
    	private String maValeur;  
    	private List<SelectItem> mesElements;
     
    	public String getMaValeur() {
    		return maValeur;
    	}
    	public void setMaValeur(String maValeur) {
    		this.maValeur = maValeur;
    	}
    	public List getMaliste()
    	{
    		ArrayList unelist = new ArrayList();
     
    	    try { 
    	    	Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
    			 String serverName = "localhost";
    			    String mydatabase = "test";
    			    String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
    				 String user = "root"; 
     
    		     String pass = "masta";
     
     
    		     java.sql.Connection connection = DriverManager.getConnection(url, user, pass);
    				     Statement instruction = (Statement) ((java.sql.Connection) connection).createStatement();
     
     
     
    				     String sql = "  select  * from test.structure     " ;    
    						ResultSet resultat  = (ResultSet) instruction.executeQuery(sql);
     
    						while(resultat.next()){
     
    							String num=resultat.getString("nom").toString();
    							unelist.add(num);
     
    						}
    	        //session.close();
    	    } catch (Exception e) {
    	        e.printStackTrace();
    	    }
     
    	    return (List) unelist;
    	}
     
     
    	public List<SelectItem> getMesElements() {
     
            if (mesElements == null) {
                   mesElements = new ArrayList<SelectItem>();
                   for (String val : getMaListe()) {
                       mesElements.add(new SelectItem(val, val));
                   }
     
               }
               return mesElements;
       }
     
     
     
     
     
     
    }
    le problème que message dise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    the method geMaliste() is undefined for the type monBean

  8. #8
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Tu me montres le code JSF ? C'est pas getMaListe() qui doit être appelée mais getMesElements()...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 18
    Par défaut
    voilà un exemple qui marche très bien
    RoomCtrl.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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    package controller;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.faces.context.FacesContext;
    import javax.faces.model.SelectItem;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    
    import pfa.esprit.Daos.RoomManager;
    import pfa.esprit.Entities.Room;
    
    public class RoomCtrl {
    	
    	private List<SelectItem> selectRoom = new ArrayList<SelectItem>();
    	private List<Room> roomList= new ArrayList<Room>();
    	private Room room =new Room();
    	private RoomManager roomManager ;
    				
    				
    				public int getIdRoom() {
    					return idRoom;
    				}
    
    				public void setIdRoom(int idRoom) {
    					this.idRoom = idRoom;
    				}
    				
    				public RoomCtrl() {
    					Context ctx;
    					try {
    						ctx = new InitialContext();
    						roomManager=(RoomManager) ctx.lookup("RoomManagerBean/local");	
    					} catch (NamingException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}	
    				}
    				
    				public Room getRoom() {
    					return room;
    				}
    
    				public void setRoom(Room room) {
    					this.room = room;
    				}
    				
    				
    				public String managerRoomPage(){
    					return "add-Room";
    				}
    
    				public void setRoom(List<Room> list) {
    					this.rooms = list;
    				}
    
    				public List<Room> getRooms() {
    					rooms=roomManager.getRooms();
    					return rooms;
    				}
    
    				public List<Room> getRoomList() {
    
    			        roomList =roomManager.getRooms();
    			        return roomList;
    			}
    
    			public void setRoomList(List<Room> roomList) {
    			        this.roomList = roomList;
    			}
    
    			public List<SelectItem> getSelectRoom() {
    			        selectRoom.clear();
    
    			        roomList = this.getRoomList();
    
    			        for (Room room : roomList) {
    
    			                selectRoom.add(new SelectItem(room,room.getCode()));
    			        }
    
    			        return selectRoom;
    			}
    							public void setSelectRoom(List<SelectItem> selectRoom) {
    			    this.selectRoom = selectRoom;
    			}
    
    				}
    et dans ta page JSF tu ecris celui là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:selectOneMenu value="#{roomCtrl.room}">
        <f:selectItems value="#{roomCtrl.selectRoom}"/>
    </h:selectOneMenu>

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Tu me montres le code JSF ? C'est pas getMaListe() qui doit être appelée mais getMesElements()...
    désolé je suis desepéré car je n'arrive pas depuis plus une semaine toujours mem chose
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.faces.model.SelectItem;
     
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.ResultSet;
    import com.mysql.jdbc.Statement;
     
     
    public class monBean {
    	private String maValeur;  
    	private List<SelectItem> mesElements;
     
    	public String getMaValeur() {
    		return maValeur;
    	}
    	public void setMaValeur(String maValeur) {
    		this.maValeur = maValeur;
    	}
    	public List getMaliste()
    	{
    		ArrayList unelist = new ArrayList();
     
    	    try { 
    	    	Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
    			 String serverName = "localhost";
    			    String mydatabase = "test";
    			    String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
    				 String user = "root"; 
     
    		     String pass = "masta";
     
     
    		     java.sql.Connection connection = DriverManager.getConnection(url, user, pass);
    				     Statement instruction = (Statement) ((java.sql.Connection) connection).createStatement();
     
     
     
    				     String sql = "  select  * from test.structure     " ;    
    						ResultSet resultat  = (ResultSet) instruction.executeQuery(sql);
     
    						while(resultat.next()){
     
    							String num=resultat.getString("nom").toString();
    							unelist.add(num);
     
    						}
    	        //session.close();
    	    } catch (Exception e) {
    	        e.printStackTrace();
    	    }
     
    	    return (List) unelist;
    	}
     
     
    	public List<SelectItem> getMesElements() {
     
            if (mesElements == null) {
                   mesElements = new ArrayList<SelectItem>();
                   for (SelectItem val : getMesElements()) {
                       mesElements.add(new SelectItem(val));
                   }
     
               }
               return mesElements;
       }
     
     
     
     
     
     
    }
    et sur la page jsf

    <h:selectOneMenu value="#{monBean.maValeur}">
    <f:selectItems value="#{monBean.mesElements}"/>
    </h:selectOneMenu>


    message d'erreur
    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
     
    javax.faces.FacesException: org.apache.jasper.el.JspPropertyNotFoundException: /ajax.jsp(102,3) '#{monBean.maValeur}' Target Unreachable, identifier 'monBean' resolved to null
    	at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
    	at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
    	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: org.apache.jasper.el.JspPropertyNotFoundException: /ajax.jsp(102,3) '#{monBean.maValeur}' Target Unreachable, identifier 'monBean' resolved to null
    	at org.apache.jasper.el.JspValueExpression.getType(JspValueExpression.java:63)
    	at org.apache.myfaces.shared_impl.renderkit._SharedRendererUtils.findUIOutputConverter(_SharedRendererUtils.java:77)
    	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.findUIOutputConverter(RendererUtils.java:407)
    	at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.findUIOutputConverterFailSafe(HtmlRendererUtils.java:477)
    	at org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.getConverter(HtmlMenuRendererBase.java:165)
    	at org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:76)
    	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:519)
    	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:543)
    	at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:315)
    	at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:150)
    	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:519)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:618)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:614)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:614)
    	at org.apache.myfaces.shared_impl.view.JspViewDeclarationLanguageBase.actuallyRenderView(JspViewDeclarationLanguageBase.java:322)
    	at org.apache.myfaces.shared_impl.view.JspViewDeclarationLanguageBase.renderView(JspViewDeclarationLanguageBase.java:181)
    	at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:263)
    	at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:85)
    	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
    	... 17 more

  11. #11
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Ton code est correct, mais quand tu vois ce message dans la stacktrace :

    Caused by: org.apache.jasper.el.JspPropertyNotFoundException: /ajax.jsp(102,3) '#{monBean.maValeur}' Target Unreachable, identifier 'monBean' resolved to null
    celà signifie que JSF n'a pas été capable d'identifier le bean appelé monBean. Il faut donc le définir dans ton faces-config.xml (voir la FAQ) :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <managed-bean>
        <managed-bean-class>monBean</managed-bean-class>    
        <managed-bean-name>ton.package.MonBean</managed-bean-name>    
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

    A noter :

    • Visiblement, ta classe monBean n'appartient à aucun package Java, ce qui est fortement déconseillé (voire interdit en fait);
    • Il faut capitaliser ton nom de classe, c'est la convention;
    • J'ai mis ici le scope session, mais tu peux mettre un autre scope...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  12. #12
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    mais le menu déroulante est vide pourquoi
    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
     
     
     <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
     
    <f:view>
    <html>
    <body>
    <h:form>
    <h:outputText value="les structure:"/><br><br>
     
     <h:selectOneMenu value="#{monBean.maValeur}" style="width: 203px; ">
    <f:selectItems value="#{monBean.mesElements}"/>
    </h:selectOneMenu>
    </h:form>
    </body>
    </html>
    </f:view>
    et

    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
     
     <managed-bean>
    			<managed-bean-name>monBean</managed-bean-name>
    			<managed-bean-class>monBean</managed-bean-class>
    			<managed-bean-scope>session</managed-bean-scope>
    		</managed-bean>
     
    <navigation-rule>
    		<display-name>test</display-name>
    		<from-view-id>/test.jsp</from-view-id>
    		<navigation-case>
    			<from-outcome>test</from-outcome>
    			<to-view-id>/test.jsp</to-view-id>
    		</navigation-case>
    	</navigation-rule>

    et
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
     import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.faces.model.SelectItem;
     
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.ResultSet;
    import com.mysql.jdbc.Statement;
     
     
    public class monBean {
    	private String maValeur;  
    	private List<SelectItem> mesElements;
     
    	public String getMaValeur() {
    		return maValeur;
    	}
    	public void setMaValeur(String maValeur) {
    		this.maValeur = maValeur;
    	}
    	public List getMaliste()
    	{
    		ArrayList<String> unelist = new ArrayList();
     
    	    try { 
    	    	Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
    			 String serverName = "localhost";
    			    String mydatabase = "test";
    			    String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
    				 String user = "root"; 
     
    		     String pass = "masta";
     
     
    		     java.sql.Connection connection = DriverManager.getConnection(url, user, pass);
    				     Statement instruction = (Statement) ((java.sql.Connection) connection).createStatement();
     
     
     
    				     String sql = "  select  * from test.structure     " ;    
    						ResultSet resultat  = (ResultSet) instruction.executeQuery(sql);
     
    						while(resultat.next()){
     
    							String num=resultat.getString("nom").toString();
    							unelist.add(num);
     
    						}
    	        //session.close();
    	    } catch (Exception e) {
    	        e.printStackTrace();
    	    }
     
    	    return (List) unelist;
    	}
     
     
    	public List<SelectItem> getMesElements() {
     
            if (mesElements == null) {
                   mesElements = new ArrayList<SelectItem>();
                   for (SelectItem val : getMesElements()) {
                       mesElements.add(new SelectItem(val));
                   }
     
               }
               return mesElements;
       }
     
     
     
     
     
     
    }
    le menu n'est pas rempli
    avec message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    20-mai-2011 12:05:31 org.apache.myfaces.config.annotation.Tomcat7AnnotationLifecycleProvider newInstance
    INFO: Creating instance of monBean

  13. #13
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bah oui, mais regarde le code getMesElements(). Elle s'appelle elle-même !

    Au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                   for (SelectItem val : getMesElements()) {
                       mesElements.add(new SelectItem(val));
                   }
    tu devrais avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                   for (String val : getMaliste()) {
                       mesElements.add(new SelectItem(val));
                   }
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  14. #14
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    merci mais comment initialiser le menu ma table contient

    inf
    fin
    exo
    exg

    le menu est rempli par la table mais je veux le menu initialise par

  15. #15
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Eh bien ajoute un SelectItem pour ça, avant d'itérer sur tes éléments récupérés de la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mesElements().add(new SelectItem(null, "-- Choisissez --"));
    for (String val : getMaliste()) {
       mesElements.add(new SelectItem(val));
    }
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

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

Discussions similaires

  1. remplir un selectOneMenu à partir d'une BD postgres
    Par faon114 dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 18/03/2014, 14h17
  2. [MySQL] Remplir une liste à partir d'une table MySQL
    Par missastro dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 27/08/2008, 17h42
  3. Remplir un selectOneMenu à partir d'une BD
    Par jdev23 dans le forum JSF
    Réponses: 18
    Dernier message: 24/08/2008, 15h57
  4. Remplir jtable a partir d'une base de donnée mysql
    Par chris81 dans le forum Composants
    Réponses: 3
    Dernier message: 26/04/2007, 14h09
  5. Réponses: 12
    Dernier message: 28/11/2006, 15h34

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