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 :

jsf - facelets : question sur la composition


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 37
    Par défaut jsf - facelets : question sur la composition
    Bonjour,
    je suis en train de me former au développement web avec les techniques JSF et facelets et
    j'ai une question concernant la composition.
    Je veux définir un menu en début de session et le conserver lorsque l'on change de page ( partie "variable"). Je suis partie sur l'idée suivante, avoir un menu "menu.xhtml" dont toutes les options sont à rendered=false et de les passer à true par programme suivant le user dans un managed bean session. Problème cela marche si je ne change pas de page. Il semble qu'il reconstruise entièrement la page et reparte du fichier menu.xhtml sans tenir compte des modifs faîtes par programme??

    Est-ce que c'est un problème de définition des templates ou est-ce le fonctionnement normal de facelets?

    merci pour vos suggestions.

    template main.xhtml

    <?xml version='1.0' encoding='ISO-8859-1' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link href="css/ggc.css" rel="stylesheet" type="text/css" />
    <title><ui:insert name="pageTitle">Page Title</ui:insert></title>
    </head>
    <body>
    <div id="header">
    <div class="panel">
    <ui:include src="./header.xhtml" > page header</ui:include>
    </div>
    </div>
    <div id="topbar">
    <div class="panel">
    <ui:insert name="topbar">Topbar</ui:insert>
    </div>
    </div>

    <div>
    <div id="sidebar">
    <div class="panel">
    <ui:insert name="sidebar">Sidebar</ui:insert>
    </div>
    </div>
    <div id="body" style="text-align: center;">
    <div class="panel">
    <ui:insert name="body">Body</ui:insert>
    </div>
    </div>
    </div>
    <div id="footer">
    <div class="panel">
    <ui:include src="./footer.xhtml" > Footer</ui:include>
    </div>
    </div>
    </body>
    </html>

    Template navigation.xhtml :

    <ui:composition template="/main.xhtml">
    <div>
    <ui:define name="pageTitle">
    <ui:insert name="pageTitle">Page Title</ui:insert>
    </ui:define>
    </div>
    <div>
    <ui:define name="topbar">
    <ui:include src="#{navigation.barRoles}">Bar Actors</ui:include>
    </ui:define>
    </div>
    <ui:define name="sidebar">
    <ui:include src="#{navigation.menuRoleCourant}">Side Menu</ui:include>
    </ui:define>
    <div>
    <ui:define name="body">
    <ui:insert name="body">Page Content</ui:insert>
    </ui:define>
    </div>
    </ui:composition>

    Template pageBlanche.xhtml :

    <ui:composition template="/navigation.xhtml">
    <ui:define name="pageTitle">
    connexion
    </ui:define>
    <ui:define name="body">
    <f:subview id="body">
    <h:form>
    <h2> Page blanche</h2>

    </h:form>
    </f:subview>
    </ui:define>
    </ui:composition>

  2. #2
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 42
    Par défaut
    En fait si j'ai bien compris, tout fonctionne tant que tu ne changes pas de page, mais si jamais tu la rafraichis ou que tu reviens sur ton menu à partir d'une autre page les modifications réalisées n'ont pas été sauvegardées....

    Le scope de ton Bean est bien en mode Session ou Application? (dans le faces-config.xml)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 37
    Par défaut
    Oui,
    des le départ je fait appel au menu mais il n'apparaît pas (rendered=false), donc lorsque je positionne certaines "option" à true et que je reste sur la même page le menu devient visible.
    J'ai fait le test d'actualiser la page, j'ai un message m'indiquant que je vais renvoyer des données par post, mais je conserve le bon affichage.

    Si je demande le reaffichage de la même page en donnant son nom (passage par le faces-config) je perds le menu.

    voici le menu:

    <ui:composition
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">

    <f:subview id="sidebar">

    <h:form>
    <h:panelGrid columns="1">
    <f:facet name="header">
    <h:outputText value="Menu Ens" styleClass="sectionTitle"/>
    </f:facet>

    <h:commandLink action="#{navigation.doChangePage}">
    <h:outputText value="Gérer référentiel métiers"/>
    <f:param name="choixPage" value="page.referentiel"/>
    </h:commandLink>

    <h:commandLink action="#{navigation.doChangePage}">
    <h:outputText value="Gérer référentiel compétences"/>
    <f:param name="choixPage" value="page.competence"/>
    </h:commandLink>

    <h:commandLink action="#{navigation.doChangePage}">
    <h:outputText value="Gérer catégories de compétences"/>
    <f:param name="choixPage" value="page.categorie"/>
    </h:commandLink>

    </h:panelGrid>

    </h:form>

    </f:subview>
    </ui:composition>

  4. #4
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 42
    Par défaut
    Mais en fait il y a un truc qui me tracasse, tu modifies le rendered des composants comment? Il n'y a aucun binding... Ou alors c'est peut-être de là que vient le problème.

    Tu utilises peut-être une méthode que je ne connais pas, mais moi pour faire ce que tu veux faire, je ferai un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ....
    
       <h:panelGroup binding="#{navigation.itemMenuA}">
          <h:commandLink action="#{navigation.doChangePage}">
             <h:outputText value="Gérer référentiel métiers"/>
             <f:param name="choixPage" value="page.referentiel"/>
          </h:commandLink>
       </h:paneGroup>
    
    ...
    Et dans le Bean navigation, le rendered se gère comme ceci :

    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
    
    ...
    //déclaration de l'ttribut lié au panelGroup
            private HtmlPanelGroup itemMenuA;
    
    //getter & setter
    	public HtmlPanelGroup getItemMenuA() {
    		return itemMenuA;
    	}
    
    	public void setItemMenuA(HtmlPanelGroup itemMenuA) {
    		this.itemMenuA = itemMenuA;
    	}
    
    ...
    //au moment de modifié le rendered à true par exemple:
             ...
             itemMenuA.setRendered(true);
             ...

    Ainsi, les valeurs modifiées en ce qui concernent les rendered le sont dans le Bean instancié, et restent donc mémorisées.

    M'enfin si ça se trouve tu as déjà essayé ou alors ce que je te propose est inadéquat.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 37
    Par défaut
    je suis désolé, ce n'était pas le bon menu. J'ai bien un binding sur chacun des commandLink. voici un exemple:

    <f:subview id="topbar">

    <h:form>
    <h:panelGrid columns="5">

    <h:commandLink id="Administrateur" binding="#{navigation.roleAdministrateur}"
    action="#{navigation.doChangeRole}" rendered="false">
    <h:outputText value="Administrateur" styleClass="sectionMenu"/>
    <f:param name="choixRole" value="adm"/>
    </h:commandLink>
    ..............................................
    </h:panelGrid>
    </h:form>

    </f:subview>
    </ui:composition>

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 37
    Par défaut
    pour le rendre visible je fais simplement :

    roleGestionnaire.setRendered(true);

    je pense que c'est tout ce qu'il y a à faire!?

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

Discussions similaires

  1. Question sur la composition d'une adresse MAC
    Par beegees dans le forum Dépannage et Assistance
    Réponses: 6
    Dernier message: 09/12/2008, 16h18
  2. Debutant : Question sur jasperReport avec jsf
    Par kam81 dans le forum JSF
    Réponses: 2
    Dernier message: 08/11/2008, 19h53
  3. [JSF][Tomahawk] Question sur le Schedule
    Par Jexou dans le forum JSF
    Réponses: 1
    Dernier message: 15/02/2008, 16h05
  4. [scanners] Quelques questions sur la composition des scans.
    Par Muesko dans le forum Périphériques
    Réponses: 13
    Dernier message: 04/09/2007, 15h37
  5. question sur utilisation de dojo avec jsf
    Par anti_gone10 dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 13/08/2007, 13h57

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