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 :

Problème lors d'un changement de page


Sujet :

JSF Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 67
    Points : 44
    Points
    44
    Par défaut Problème lors d'un changement de page
    Bonjour,

    J'ai un problème récurrent qui arrive sur un problème particulier de changement de page.

    J'ai une page qui contient une liste d'objets dans un dataTable (primefaces), chaque objet de la liste peut être accédé via une petite loupe permettant de visualiser le détail de l'objet en question dans une autre page.

    Le problème que je rencontre est que lorsque j'appelle la nouvelle page, la liste des objets est appelée une nouvelle fois alors que ça ne devrai pas arriver.

    Bean gérant les listes :
    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
    @Controller
    @Scope("request")
    public class ServiceApplicationBean extends ServiceBean {
        private static final long serialVersionUID = 5309440553432239558L;
     
        public static ServiceApplicationBean getBean() {
            FacesContext context = FacesContext.getCurrentInstance();
            return (ServiceApplicationBean) context.getApplication().evaluateExpressionGet(
                    context, "#{serviceApplicationBean}", ServiceApplicationBean.class);
        }
     
        @Autowired
        private IApplicationFactoryService applicationFactoryService;
     
        private List<Application> applicationList;
    ...
     
        public IApplicationFactoryService getApplicationFactoryService() {
            return applicationFactoryService;
        }
     
        public void setApplicationFactoryService(IApplicationFactoryService applicationFactoryService) {
            this.applicationFactoryService = applicationFactoryService;
        }
        //méthode qui permet de récupérer l'ensemble des applications
        public List<Application> getApplicationList() {
            if(this.applicationList == null){
            	this.applicationList = this.applicationFactoryService.getApplicationService().getAllApplications();
            }
        	return this.applicationList;
        }
    ...
    vue contenant le dataTable :
    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
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
                    xmlns:h="http://java.sun.com/jsf/html"
                    xmlns:f="http://java.sun.com/jsf/core"
                    xmlns:ui="http://java.sun.com/jsf/facelets"
                    xmlns:p="http://primefaces.org/ui">
     
        <p:panel style="margin: 5px;" header="#{lang['available_applications']}">
            <p:dataTable value="#{serviceApplicationBean.applicationList}"
                         var="appli" scrollable="true" scrollHeight="450"
                         sortMode="multiple">
     
                ......
                <!-- lors du clic sur commandLink, j'ai l'impression qu'il recharge la liste avant de naviguer vers la page suivante -->
                <p:column style="width: 3%">
                    <p:commandLink styleClass="ui-icon ui-icon-search" title="#{lang['show']}"
                                   update="@form" process="@this" style="margin: 0 auto;"
                                   action="#{pageBean.gotoApplicationApplication(appli)}"/>
                </p:column>
     
               ....
            </p:dataTable>
        </p:panel>
     
    </ui:composition>
    bean assurant la navigation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Controller
    @Scope("session")
    public class PageBean implements Serializable{
     
    //méthode appelée par la premiere vue pour accéder au détail de l'application
    public void gotoApplicationApplication(Application appli) {
    		Application selected = this.applicationFactoryService
    				.getApplicationService().getApplicationDetail(appli);
    		if (selected != null) {
    			ApplicationBean.getBean().setSelected(selected);
    			this.gotoPage(CENTER_APPLICATION_APPLICATION);
    		}
    	}
    ......
    Mes beans sont gérés par spring.
    J’espère que j'ai été clair. Je ne sais pas si c'est un problème qui est rencontré régulièrement ailleur, j'ai peut être fait une mauvaise construction quelque part. Si quelqu’un pouvait m'éclairer ce serait cool merci

  2. #2
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut
    as-tu essayé en enlevant:
    eric

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 67
    Points : 44
    Points
    44
    Par défaut
    En fait les écrans de mon application sont séparés en deux parties :
    -une partie nord contenant le menu
    -une partie centrale contenant le contenu

    chaque partie est englobée dans un formulaire spécifique.
    index.xhtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ......
    <h:form id="form_north">
            <ui:include src="#{pageBean.north}.xhtml"/>
        </h:form>
     
        <h:form id="form_center">
            <ui:include src="#{pageBean.center}.xhtml"/>
        </h:form>
    ....
    Je me demande si cela n'a pas un impact sur mon problème lorsque je clic sur mon commandLink.

    En tout cas, pour répondre à ta question jeffray03, j'ai essayer d'enlever l'attribut update mais ça ne fonctionne pas et empêche l'affichage de la page suivante

  4. #4
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    il ya une propriéte de je ne sais pas si elle pourra t´aoder.
    car je n´ai pas bien saisi la problematique.

    Eric

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 67
    Points : 44
    Points
    44
    Par défaut
    En clair j'appelle ma page application/index.xhtml qui contient la listes des applications, une requete sql (Hibernate en orm) est utilisée via mon service, pour les récupérer. Maintenant je veux accéder à une application particulière. C'est à cet endroit que je ne comprend pas pourquoi lorsque je veux accéder à un seul élément, il me recharge toute ma liste d'application (nouvelle requête) derrière avant d'envoyer la requête qui permet d’accéder au détail de l'application et d'afficher la page. Du coup ça me crée des problèmes de performances.

    Lorsque j’essaie de déboguer je vois bien qu'on passe dans la méthode getApplicationList(), comme si la page contenant la liste était rechargée avant d'afficher la suivante, alors que ce n'est pas le comportement attendu. Je dois louper quelque chose.

    J’espère que je suis un peu plus clair ^^

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Pour moi, ton problème est lié à update="@form" de ton commandLink.
    Il ne sert à rien, le process ne me paraît pas plus utile d'ailleurs...

    En gros, tu demandes d'envoyer les infos du lien au contrôleur de ta page (process), puis de rafraîchir tout ton formulaire (update), puis de lancer la navigation vers la nouvelle page (action)...
    Comme ton contrôleur est en scope request, il relance le chargement de la liste via le service... bref, que de la ressource perdue
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 67
    Points : 44
    Points
    44
    Par défaut
    Donc si je comprend bien, le fait de faire un update="@form", va en quelque sorte me recharger mon contenu étant donné que le template de contenu est intégré dans une balise form.

    Pourtant bizarrement, si j’enlève update, process ou les deux, mon contenu ne s'affiche pas et je suis obligé de rafraichir le web browser pour que le contenu s'affiche.


    Le problème des requêtes vient en effet du scope de mon bean. Je l'ai changé en singleton et ça fonctionne étant donné qu'il n'y a qu'une seule instance du bean. Par contre, il me renverra toujours la même liste car elle ne sera chargée qu'une seule fois, du coup si j'ajoute un nouvel élément dans la liste il ne sera pas affiché à moins de l'ajouter explicitement dans la liste lors de la sauvegarde.

    Edit : du coup je pense que je suis obligé de garder mon update="@form" parceque sinon ça ne met pas à jour le bon template.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    C'est un problème récurrent lié au traitement ajax par défaut d'un p:commandButton... Essaye avec une redirection ou alors ajoute ajax="false".
    Si tu utilises le fichier faces-config.xml, ce sera <redirect />
    Si tu donnes l'url de la page en retour dans ton contrôleur, il faudra ajouter à la fin ?faces-redirect=true
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 67
    Points : 44
    Points
    44
    Par défaut
    En effet en mettant ajax="false" cela fonctionne parfaitement.

    Merci pour tes réponses

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

Discussions similaires

  1. problème lors de chargement de la page
    Par sonsonsana dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 03/05/2010, 10h56
  2. Problème lors du chargement de la page
    Par ahlem83 dans le forum JSF
    Réponses: 2
    Dernier message: 01/07/2009, 11h57
  3. Problème lors d'une insertion de page
    Par tomividad dans le forum VBA Word
    Réponses: 1
    Dernier message: 20/03/2009, 16h43
  4. [WSS 3.0] Problème lors d'un changement d'utilisateur
    Par solveig dans le forum SharePoint
    Réponses: 7
    Dernier message: 05/06/2007, 17h17
  5. Inclure un fond musical sans rechargement lors d'un changement de page
    Par Him dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 02/08/2006, 18h20

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