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 :

Mise à jour d'une JSP après une requête


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 35
    Points
    35
    Par défaut Mise à jour d'une JSP après une requête
    Bonjour,

    Je débute en JSP et ma question n'est peut être pas très pertinente... Soyez indulgent s'il vous plait

    Pour mon projet, j'utilise une base de données Mysql et Glassfish.

    Mon problème est que, lorsque je modifie ma base de données via une JSP et que je demande ensuite d'afficher ces nouvelles données, ma page web m'affiche parfois les données modifiées, parfois les anciennes données (et ce aléatoirement il me semble...). Je me suis dis qu'il s'agissait peut être d'un problème de cache et j'ai utilisé le code JSP suivant pour y recourir mais sans résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <%
    response.setHeader("Cache-Control","no-cache");
    response.setHeader("Pragma","no-cache");
    response.setDateHeader ("Expires", -1);
    %>
    Je pense donc être partie sur une mauvaise piste... Je précise que quand je vais voir dans ma base de données elle est belle et bien modifiée, et que si je recompile mon projet les JSP affichent bien les dernière données rentrées.

    Si quelqu'un peut m'aider, merci d'avance !

  2. #2
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Essaye aussi, en complément, en indiquant le contrôle du cache sous forme de "meta" dans le tag HEAD de page JPS :

    http://www.i18nguy.com/markup/metata...#cache-control


    la mise à jour de la base de données passe par une servlet ?
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Pour la balise HTML, mon compilateur me dit que la valeur CACHE-CONTROL n'est pas bonne (je cite "bad value CACHE-CONTROL"), j'avais déjà essayé et je ne comprend pas pourquoi il ne l'accepte pas.

    Ma connexion à la base de données ne passe pas par un servlet, j'utilise hibernate et une DAO qui contient les méthodes avec leurs requêtes associées (c'est un projet en groupe et ce n'est pas moi qui me suis chargé d'hibernate, donc je n'en connais pas exactement le fonctionnement).

    Voilà voilà

  4. #4
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    et tu as essayé quand même le cache control HTML ?

    nan parce que ton "compilateur" (qui doit être simplement eclipse) souligne peut-être la valeur, mais ce n'est pas une erreur de "compilation" car HTML n'est pas un langage compilé

    Donc essaye quand même avec la balise META !
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  5. #5
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Après tu dis que tu utilises Hibernate, or Hibernate dispose de caches ... donc si tu n'en montre pas plus sur ta page JSP, tes classes JAVA et la config Hibernate ... on pourra pas t'aider bcp plus.
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Du coup j'ai essayé avec la balise HTML mais sans succès, donc ça vient peut être de hibernate...

    En terme de configuration je ne sais pas trop quels éléments apporter, pour hibernate on met directement les classe à jour via une connexion à la base de données (je ne sais pas si c'est très clair dit comme ça...), et toutes mes classes java sont créées automatiquement. Je vais mettre quelques morceau de code pour que ça soit plus compréhensible.

    Pour mettre un peu de contexte c'est un site sur la gendarmerie, donc j'ai par exemple une classe brigade qui ressemble à ça (générées par hibernate) :

    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
    package projetreservistes.model;
    // Generated 2 mars 2013 20:16:39 by Hibernate Tools 3.2.1.GA
     
     
    import java.util.HashSet;
    import java.util.Set;
     
    /**
     * Brigade generated by hbm2java
     */
    public class Brigade  implements java.io.Serializable {
     
     
         private String codeUnite;
         private Compagnie compagnie;
         private String nom;
         private String adresse;
         private int codePostal;
         private String ville;
         private Set missions = new HashSet(0);
     
        public Brigade() {
        }
     
     
        public Brigade(String codeUnite, Compagnie compagnie, String nom, String adresse, int codePostal, String ville) {
            this.codeUnite = codeUnite;
            this.compagnie = compagnie;
            this.nom = nom;
            this.adresse = adresse;
            this.codePostal = codePostal;
            this.ville = ville;
        }
        public Brigade(String codeUnite, Compagnie compagnie, String nom, String adresse, int codePostal, String ville, Set missions) {
           this.codeUnite = codeUnite;
           this.compagnie = compagnie;
           this.nom = nom;
           this.adresse = adresse;
           this.codePostal = codePostal;
           this.ville = ville;
           this.missions = missions;
        }
     
    // les get et set que je vous épargne
     
    }
    Avec son code xml associé :
    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 2 mars 2013 20:16:39 by Hibernate Tools 3.2.1.GA -->
    <hibernate-mapping>
        <class name="projetreservistes.model.Brigade" table="Brigade" catalog="projetReservistes">
            <id name="codeUnite" type="string">
                <column name="codeUnite" length="10" />
                <generator class="assigned" />
            </id>
            <many-to-one name="compagnie" class="projetreservistes.model.Compagnie" fetch="select">
                <column name="numComp" length="30" not-null="true" />
            </many-to-one>
            <property name="nom" type="string">
                <column name="nom" length="50" not-null="true" />
            </property>
            <property name="adresse" type="string">
                <column name="adresse" length="100" not-null="true" />
            </property>
            <property name="codePostal" type="int">
                <column name="codePostal" not-null="true" />
            </property>
            <property name="ville" type="string">
                <column name="ville" length="50" not-null="true" />
            </property>
            <set name="missions" inverse="true">
                <key>
                    <column name="uniteAffectation" length="10" not-null="true" />
                </key>
                <one-to-many class="projetreservistes.model.Mission" />
            </set>
        </class>
    </hibernate-mapping>
    Ensuite j'ai ma DAO dans laquelle j'ai mes requêtes (je n'en met qu'un petit morceau pour donner l'idée) :

    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
    public class Dao implements IDao {
     
        Session session = null;
     
        public Dao() {
            this.session = HibernateUtil.getSessionFactory().getCurrentSession();
        }
     
        @Override
        public List listerReservistes() throws Exception {
            List<Reserviste> listRes = null;
            try {
                Transaction tx = session.beginTransaction();
                Query q = session.createQuery("from Reserviste");
                listRes = (List<Reserviste>) q.list();
            } catch (Exception e) {
                throw new Exception("Erreur rencontrée pour lister les reservistes !");
            }
            return listRes;
        }
    }
    Et dans ma jsp je lui demande d'afficher les réserviste à l'aide de ma dao (là aussi je ne met que le morceau de code "utile") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <%
    Dao dao = new Dao();
    List<Reserviste> maListe = dao.listerReservistes();
    int i = 1;
    for (Reserviste r : maListe) {%>
    <tr><td style="background-color: #DCDCDC;"><center><%=i%></center></td><td style="background-color: #DCDCDC;"><%=r.getNom()%></td><td style="background-color: #DCDCDC;"><%=r.getPrenom()%></td><td style="background-color: #DCDCDC;"><%=r.getMail()%></td><td style="background-color: #DCDCDC;"><%=r.getVille()%></td></tr>
    <% ++i;
     }%>
    Et si par exemple je rajoute un réserviste en base de donnée une fois le site compilé, des fois il me l'affichera, des fois non. Voilà voilà, peut être qu'il manque encore des information, pour hibernate je ne sais pas trop quoi montrer d'autre (s'il y a des configuration particulières ce sera gentil de m'expliquer, je ne m'y connais pas assez).

    Merci !

  7. #7
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Déjà un truc qui me choque dans ta DAO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Transaction tx = session.beginTransaction();
    et elle n'est jamais fermée.

    regarde la documentation officielle :
    https://community.jboss.org/wiki/Ses...s_objects_DAOs
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Je viens de lire la doc et du coup je comprend un peu mieux hibernate... J'ai la sensation qu'on est partie vraiment de travers en fait (je précise qu'on nous a filer un projet en JEE à faire en 3 mois sans avoir jamais rien appris sur le JEE, d'où la catastrophe...).

    En fait si je met des finally session.close(), je ne peux plus rien modifier via mes JSP (elles rencontrent une erreur : impossible de faire une modification, la session est fermée). Le principe est qu'il faut se connecter à un compte pour faire des modification sur la base de données, et j'ai l'impression que c'est la session du compte qui est fermée au lieu de la session destinée à la transaction. En allant voir le lien, j'ai vu qu'ils font appel à sessionFactory, mais je n'ai pas vraiment compris comment l'utiliser... Ma classe hibernate ressemble à ça :

    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
     
    package projetreservistes.tools;
     
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.SessionFactory;
     
    /**
     * Hibernate Utility class with a convenient method to get Session Factory
     * object.
     */
     
    public class HibernateUtil {
     
        private static final SessionFactory sessionFactory;
     
        static {
            try {
                // Create the SessionFactory from standard (hibernate.cfg.xml) 
                // config file.
                sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
            } catch (Throwable ex) {
                // Log the exception. 
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            }
        }
     
        public static SessionFactory getSessionFactory() {
            return sessionFactory;
        }
    }
    Si j'ai bien compris, c'est une sessionFactory qu'il faut utiliser pour faire les requêtes ? J'ai tenté quelques lignes de codes mais rien n'a fonctionné...

    Merci beaucoup de m'aider en tout cas !

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Du coup on a refait toute notre Dao, ça venait bien de ça !

    Merci !

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

Discussions similaires

  1. Afficher une recherche après une sélection dans une ListBox
    Par vitalus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/05/2015, 18h04
  2. Réponses: 7
    Dernier message: 20/02/2012, 09h01
  3. Appeler une méthode d'une applet dans une jsp
    Par salmoucha10 dans le forum Applets
    Réponses: 1
    Dernier message: 11/01/2011, 19h25
  4. Réponses: 0
    Dernier message: 30/09/2009, 18h42

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