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 :

Rafraichissement / incohérence entre affichage et contenu en base


Sujet :

JSF Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je gère des annonces et j’affiche le nombre de fois qu’une annonce est visualisée.

    Mon problème est que mon nombre de vues n’est pas rafraichi à l’écran alors qu’il est bien incrémenté en base.

    J’utilise GlassFish comme serveur d’applications et même quand j’arrête mon Firefox pour le relancer, ou que je passe de Firefox à IE, je garde le même résultat affiché. Par contre si j’arrête GlassFish et que je le relance j’affiche le bon résultat (celui qui est en base).

    Je précise que je passe par un Datamodel pour afficher toutes les annonces, puis je fais une sélection d’une ligne du datamodel pour afficher l’annonce choisie avec son nombre de vues. Je détruis également le Managed Bean correspondant avant chaque affichage des annonces.

    Voici la fonction d'appel :
    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
    /*------------------------------------------------------------------------*/
        /* Fonction view (focus sur une annonce particuliere choisie ds la liste) */
        /*------------------------------------------------------------------------*/
        public String consultationAnnonce() {
            //----------------------------------------
            // On récupere le row de l'annonce cliquée
            //----------------------------------------
            annonceEtendue = (AnnonceEtendue) getItems().getRowData();
     
            //--------------------------------
            // Maj de l'annonce (nbre de vues)
            //--------------------------------
            annonce = annonceFacade.find(annonceEtendue.getAnnId());
            annonce.setAnnNbvues(annonce.getAnnNbvues() + 1);
            annonceFacade.edit(annonce);
     
            // Retour vers la JSF annonce.xhtml pour affichage de l'annonce
            logger.debug("GererAnnoncesMB====>Vers JSF gererAnnoncesDetail");
            return "gererAnnoncesDetail";
        }
    Et la JSF correspondante :
    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
    <body>
            <ui:composition template="../templates/templateGP01.xhtml">
     
                <ui:define name="content">
                    <h:form>
     
                        <h:panelGrid columns="8">
                            <h:outputText value="Annonce N°" style="font-weight: bold" />
                            <h:outputText value="#{gererAnnoncesMB.annonceEtendue.annId}" title="id"/>
     
                            <h:outputText value="visualisée" style="font-weight: bold" />
                            <h:outputText value="#{gererAnnoncesMB.annonceEtendue.annNbvues}" title="nbvues" style="font-weight: bold"/>
                            <h:outputText value="fois" style="font-weight: bold" />
                        </h:panelGrid>
     
                        <br />
     
                    </h:form>
                </ui:define>
     
            </ui:composition>
     
        </body>
    </html>
    Donc je prends les infos dans la ligne cliquée (rowdata du Datamodel) et affiche les données. Au préalable j'ai bien sur effectué la lecture des lignes d'annonces en base pour afficher les rows.

    Je pense malheureusement pas que ce code puisse aider, c'est comme si le Datamodel n'était pas rechargé par les infos mises en base, plus grave, même quand je détruis le MBean ou est déclaré le Datamodel je reste toujours sur des données non mises à jour (alors que je les vois en base ou elles ont bien été flushées...)

    Quelqu'un saurait-il m'indiquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 153
    Points : 105
    Points
    105
    Par défaut
    J’utilise Glassfish comme serveur d’apps et même quand j’arrête mon Firefox pour le relancer, ou que je passe de Firefox à IE, je garde le même résultat affiché. Par contre si j’arrête Glassfish et que je le relance j’affiche le bon résultat (celui qui est en base).
    utilises-tu JPA pour la gestion de la persistence? il est possible que tu enregistre dans ta base de donnée en utilisant du sql natif et qu'après tu essaies de lire le résultat via JPA. Si c'est le cas, fait le savoir

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Oui j'utilise JPA (avec entités et façades autogénérées par NetBeans).

    Et de mémoire, oui malheureusement j'ai du au moins une fois mixer les 2 (JPA et natif SQL).

    Je suis passé directement par une servlet et un EJB pour l'activation des mots de passe. Du coup la gestion de la persistance plantait (pas la lecture, mais la mise à jour).

    J'ai pensé que la raison sous-jacente était que la servlet est gérée par le conteneur de servlets (Tomcat) et non par le serveur d'applications. En particulier elle ne doit pas pouvoir utiliser l'EntityManager du serveur d'applications, ni JTA (gestion des transactions offert par GlassFish). Du moins c'était mon interprétation...

    Je suis un débutant (de 53 ans), et j'avoue que JPA + JSF + JAVA + HTML + CSS + Objet + autres Beaneries, cela fait beaucoup à absorber d'un coup...

    Encore merci de vous occuper de mon cas

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 153
    Points : 105
    Points
    105
    Par défaut
    si ton implémentation de JPA est eclipseLink (implementation par defaut sous glassfish), alors par defaut le cache partagé est activé; ce qui veux dire que tes requêtes JPA interrogent le contexte de persistence et non la BD directement. pour faire court, desactive le cache partagé d'EclipseLink et essaie à nouveau.
    pour celà, ajoute cette ligne dans ton persistence.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="eclipselink.cache.shared.default" value="false"/>

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci à toi.

    Je n'ai pas encore essayé, mais je suis sur que c'est cela.
    Ca ne peut être qu'un problème de cache, j'avais pensé au cache de la base où à celui du browser en oubliant qu'il y en avait un aussi pou la persistance

    Je vais tester.

    Merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/06/2009, 18h06
  2. Réponses: 5
    Dernier message: 11/11/2007, 15h24
  3. Internet Explorer a restreint l'affichage du contenu actif!
    Par Laurent_g42 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/08/2005, 19h24
  4. [HTML] affichage du contenu des balises 'alt' dans une iframe
    Par etarip dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/08/2005, 14h08
  5. affichage du contenu d'un fichier texte
    Par axel-erator dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/08/2005, 16h06

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