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 :

Récupérer ma liste dans ma JSP


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut Récupérer ma liste dans ma JSP
    Bonjour à tous,

    j'essaie de récupérer une liste dans ma jsp mais sans succès.

    Je dispose d'une classe DepartementDao dans laquelle je récupère un département grâce à la méthode find.

    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
    public class DepartementDao extends DAO<Departement>{
     
    	public Departement find(int number) {
    		Departement dep = new Departement();
    		try {
                ResultSet result = this .connect
                                        .createStatement(
                                                	ResultSet.TYPE_SCROLL_INSENSITIVE, 
                                                    ResultSet.CONCUR_UPDATABLE
                                                 ).executeQuery(
                                                    "SELECT * FROM Departement D, Ville V WHERE D.number=V.departement_number and number = " + number
                                                 );
                if(result.first()){
                	VilleDao villeDao = new VilleDao();
                    ArrayList<Ville> listVille = new ArrayList<Ville>();
     
                    result.beforeFirst();
                    while(result.next() && result.getInt("V.id") != 0)
                    	listVille.add(villeDao.find(result.getInt("V.id"))); 	
                	result.first();
                		dep = new Departement(number, result.getString("D.name"), listVille);
                }
    		    } catch (SQLException e) {
    		            e.printStackTrace();
    		    }
    	   return dep;
    	}

    J'ai testé ce code dans ma classe main (jai un bean Departement, qui a un attribut Name) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                   DAO<Departement> departement = new DepartementDao();
    		ArrayList<String> allDepartments = new ArrayList<String>(); 
    		for(int i = 1; i <= 102; i++){
     
    			allDepartments.add(departement.find(i).getName().toString());
    		}
     
    		for (String dep : allDepartments){
     
    			System.out.println(dep);
    		}
    ça fonctionne bien.

    Le soucis c'est que j'aimerai récupérer cette liste de départements dans ma jsp, alors j'essaie de faire la même chose dans ma jsp, mais j'obtiens une NullPointeurException lorsque je set ma liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <% 
                    DAO<Departement> departement = new DepartementDao();
                    ArrayList<String> departements = new ArrayList<String>();
                    departements.add(departement.find(1).getName().toString());
    %>
    Mon erreur :

    java.lang.NullPointerException
    dao.DepartementDao.find(DepartementDao.java:16)

    Y a t'il un moyen plus simple de récupérer ma liste ? et sinon, pourquoi est ce j'obtiens cette exception dans ma jsp et pas dans ma classe de test ?


    Merci à vous.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Je suppose que ta connexion est null...
    Comment la connexion à la base de données est-elle créée ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    J'ai une classe dédiée qui s'occupe de la connection à ma bdd. En effet dans ma classe DepartementDao et dans ma classe de test je rappel la connection à chaque fois. J'ai pris pour exemple la classe ConnectionPostgreSQL dans ce tutoriel : http://cyrille-herby.developpez.com/...c-pattern-dao/

    Utiliser la connection à ma base dans la jsp serait quelque chose de vraiment sale je pense ? Du coup quel moyen dois je utiliser pour récupérer ma liste ? Désolé pour ces questions qui doivent être triviales, je débute

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Il n'y a pas de soucis, on a tous débuté un jour

    De mon point de vue, la jsp ne devrait générer que le "rendu" html envoyé au client (le navigateur), le modèle MVC permet de mieux structurer les applications, chaque couche ayant sa propre responsabilité.
    Donc, dans ton cas, j'utiliserais un contrôleur (servlet, action struts...) pour constituer la liste et je la "poserais" dans le contexte request ou session pour que la page jsp puisse récupérer les données.
    Le cycle est le suivant :
    navigateur (request) -> servlet -> jsp -> navigateur (response)
    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
     
    SERVLET
    ======
     
    String parametre = request.getParameter("le_nom_du_parametre");List<Departement> list = DepartementDao.???;
    ...
    request.setAttribute("MaListe", list);
     
    request.getRequestDispatcher("/monRepertoire/maPage.jsp").forward(request, response);
     
     
    JSP
    ==
     
    <%
    List<Departement> list = (List<Departement>)request.getAttribute("MaListe");
    ...
    etc
    %>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Merci pour votre réponse, ça m'a aidé à y voir plus clair. J'ai fait le test avec une liste que j'ai rempli à la main et ça fonctionne j'arrive à l'afficher dans ma jsp

    Malheureusement je n'arrive pas à m'en sortir lorsque j'essaie de remplir ma "vraie" liste dans ma servlet. Cela fait quelques heures que je tourne en rond. J'ai une classe de test dans laquelle je rempli ma liste ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	       DAO<Departement> departement = new DepartementDao();
    		ArrayList<String> allDepartments = new ArrayList<String>(); 
    		for(int i = 1; i <= 102; i++)
    		{
    			if (departement.find(i)!=null)
    			{
    				allDepartments.add(departement.find(i).getName().toString());
    			}
    		}
    Tout se passe bien, ma liste est bien rempli. Lorsque j'applique le même code dans ma servlet, j'obtiens une null pointer exception qui est apparemment dûe à un problème de connection à la base de données, voici l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/peche
    	at java.sql.DriverManager.getConnection(DriverManager.java:596)
           ...
    Je ne comprends pas pourquoi d'une classe à l'autre ça ne fonctionne plus, j'ai téléchargé plusieurs drivers jdbc différents mais rien n'y fait. Je l'ai également placé dans le répertoire lib de tomcat, mais aucun changement.

    Voici à quoi ressemble le singleton que j'utilise pour récupérer ma connexion à la base :

    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
    package bdd;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
     
    public class ConnectionMySQL {
     
    	/**
    	 * URL de connection
    	 */
    	private static String url = "jdbc:mysql://localhost/peche";
    	/**
    	 * Nom du user
    	 */
    	private static String user = "root";
    	/**
    	 * Mot de passe du user
    	 */
    	private static String passwd = "**********";
    	/**
    	 * Objet Connection
    	 */
    	private static Connection connect;
     
    	/**
    	 * Méthode qui va nous retourner notre instance
    	 * et la créer si elle n'existe pas...
    	 * @return
    	 */
     
     
    	public static Connection getInstance(){
    		if(connect == null){
    			try {
    				connect = DriverManager.getConnection(url, user, passwd);
    				System.out.println("Connection ok");
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}		
    		return connect;
    	}	
     
    }
    Il y a apparemment une subtilité que je ne comprends pas, ma connexion est appelée dans une classe DAO.java dont héritent toutes les autres DAO :


    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
    package dao;
     
    import java.sql.Connection;
     
    import bdd.ConnectionMySQL;
     
    public abstract class DAO<T> {
     
    	public Connection connect = ConnectionMySQL.getInstance();
     
    	/**
    	 * Permet de récupérer un objet via son ID
    	 * @param id
    	 * @return
    	 */
    	public abstract T find(int id);
     
    	/**
    	 * Permet de créer une entrée dans la base de données
    	 * par rapport à un objet
    	 * @param obj
    	 */
    	public abstract T create(T obj);
     
    	/**
    	 * Permet de mettre à jour les données d'une entrée dans la base 
    	 * @param obj
    	 */
    	public abstract T update(T obj);
     
    	/**
    	 * Permet la suppression d'une entrée de la base
    	 * @param obj
    	 */
    	public abstract void delete(T obj);
    }
    Si jamais vous avez une idée je suis preneur .

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Pour charger la connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Class.forName("com.mysql.jdbc.Driver");
    Connection connection = DriverManager.getConnection("url", "user", "password");
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Une fois que tu auras réussi à faire fonctionner ton test, il faudrait revoir la façon dont tu gères les connexions.
    En contexte web, il faut utiliser un datasource pour gérer tes connexions.
    Ensuite, une connexion, ça s'ouvre et ça se ferme quand on ne s'en sert plus.
    J'ai l'impression que tu utilises une connexion unique ce qui n'est pas optimum.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    ça a marché merci

    Idem pour ma gestion de la connexion, je l'ai optimisé, c'est plus performant maintenant !

    Merci à vous.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/06/2008, 18h20
  2. recuperer les données d´une Liste dans ma Jsp
    Par makohsarah dans le forum Struts 1
    Réponses: 1
    Dernier message: 26/05/2008, 11h18
  3. Récupérer une valeur dans une jsp
    Par newmar dans le forum Struts 1
    Réponses: 2
    Dernier message: 09/05/2008, 23h26
  4. Affichage d'une liste dans une JSP
    Par KristofNancy dans le forum Struts 1
    Réponses: 5
    Dernier message: 23/01/2008, 14h13
  5. Récupérer objets proprement dans la JSP
    Par lalilulelo dans le forum Struts 1
    Réponses: 5
    Dernier message: 21/12/2007, 11h13

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