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 :

[primefaces] gestion de la navigation et du chargement des composants dynamiques


Sujet :

JSF Java

  1. #1
    Membre habitué
    Avatar de CPI_en_mousse
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 332
    Points : 168
    Points
    168
    Par défaut [primefaces] gestion de la navigation et du chargement des composants dynamiques
    Bonjour à tous,

    voici ma problématique, je souhaiterai mettre en place un système dynamique pour charger des composants selon un paramétrage défini.

    je détaille :

    j'ai un écran coupé en 1 tiers / 2 tiers.

    lorsque j'arrive sur ma page, je reçois un paramètre m'indiquant dans quel composants afficher sur le 1er tiers.

    par exemple, si je reçois p1, je devrais afficher les composants C1, C2 et C4
    si je reçois p2, je devrais afficher C2, C4
    si je reçois p3, je devrais afficher C3,C5
    ..... et ainsi de suite

    j'ai un paramétrage entre le paramètre reçu et les composants à afficher
    Ayant un grand nombre de composants, de données et de possibilités, je souhaiterai avoir un système dynamique s'appuyant sur la paramétrage qui ne chargerai uniquement les composants souhaités et les données liées.

    une fois le 1er tiers affiché, l’utilisateur pourra cliquer sur certaines infos contenu dans les composants pour afficher une vue détaillé dans les 2 tiers restants.

    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
     
        <f:metadata>
            <f:viewAction action="#{testControleur.initPage()}"
                onPostback="false" />
        </f:metadata>
        <ui:define name="titre-page"> test</ui:define>
        <ui:define name="corps-page">
            <section class="corps_zone_1quart">
                <p:panel id="panelResumeRcs" >
                    <ui:repeat var="nomComposantResume"
                        value="#{monBean.listeResume}">
                        <ui:include
                            src="/WEB-INF/composants/resume/#{nomComposantResume}" />
                    </ui:repeat>
                </p:panel>
     
            </section>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /**
         * cette methode nous permet d'initialiser les bean liée a la page 
         */
         public void initPage() {
     
               monBean.setListeResume(new ArrayList<String>());
               //info générales
               monBean.getListeResume().add("composant-resume-info-gen.xhtml");
               //administration
               monBean.getListeResume().add("composant-resume-administration.xhtml");
               administrationControleur.initAdministration();
               listeTransverseControleur.initialiserListePourAdministration();
         }
    j'ai commencé à faire un essai avec la balise ui:repeat mais j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    15:21:31,887  SEVERE [fr.convergence.commun.exception.CustomExceptionHandler]  (default task-2) Erreur non gérée par l'application détectée:  javax.faces.view.facelets.FaceletException: Error Parsing  /WEB-INF/composants/resume/: Error Traced[line: 1] Content is not  allowed in prolog.
    j'ai l'impression que ma listeResume (mon bean / controleur) n'est pas encore initialisé lors de l’interprétation de ma page (même chose avec l'ajout d'un @postConstruct)

    Merci pour vos réponse
    Tout à une fin, sauf le saucisson qui en as 2.
    -----------------

  2. #2
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juillet 2015
    Messages : 62
    Points : 82
    Points
    82
    Par défaut
    Hello CPI_en_mousse.

    Je ferai quelque chose de plus simple.

    1 - Je pense que tu dois déjà le faire mais bon au cas ou : Tu passe un paramètre qui te permettra de déterminer la page appelante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:commandButton id="submitButton" value="Submit" action="#{navigation.outcome}">
    	<f:param name="provenance" value="page1" />
    </h:commandButton>
    2 - Tu récupère ce parametre dans ton controller

    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
     
    public String outcome(){
     
    	FacesContext fc = FacesContext.getCurrentInstance();
    	this.paramNavigation = getNavigationParam(fc);
     
    	return "pageResultat";
    }
     
    public String getNavigationParam(FacesContext fc){
     
    	Map<String,String> params = fc.getExternalContext().getRequestParameterMap();
    	return params.get("provenance");
     
    }
    3 - Dans ton controller tu rajouter ensuite des booleans qui te permettront d'afficher ou masquer tes composants
    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
     
    private boolean afficherComposantA = false;
    private boolean afficherComposantB = false;
     
    public String outcome(){
     
    	FacesContext fc = FacesContext.getCurrentInstance();
    	this.paramNavigation = getNavigationParam(fc);
     
    	if(paramNavigation.equalIgnoreCase("page1"){
    		afficherComposantA  = true;
    	}
     
    	if(paramNavigation.equalIgnoreCase("page2"){
    		afficherComposantB  = true;
    	}
     
    	return "pageResultat";
    }
    Apres il ne restera plus qu'à afficher tes composants en bindant l'attribut rendered au boolean correspondant.

    Ce code peut être amélioré mais il presente la logique.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/04/2011, 08h48
  2. Gestion de la navigation entre pages
    Par Morad ISSOULGHANE dans le forum ASP.NET
    Réponses: 3
    Dernier message: 22/03/2010, 15h09
  3. Gestion de l'ordre de chargement des images
    Par MrManchot dans le forum jQuery
    Réponses: 1
    Dernier message: 25/01/2010, 14h42
  4. Chargement des composants asp.net
    Par oclone dans le forum Visual Studio
    Réponses: 0
    Dernier message: 06/11/2008, 15h21
  5. [Visual Editor] Chargement des composants défectueux
    Par arnobidul dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 19/12/2006, 10h28

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