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 :

[richfaces] tabPanel dynamique


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
    Avril 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut [richfaces] tabPanel dynamique
    Bonjour,

    Je suis débutant dans le développement web et je m'intéresse à JSF et richfaces.

    J'aimerai faire un rich:panel comme ci-dessous....

    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
    <rich:tabPanel>
     
           <rich:tab label="tab 1">
    		<ui:include src="panelInsideTab.xhtml">
    			<param name="param1" value="hello"/>
    		</ui:include>
    	</rich:tab>
     
    	<rich:tab label="tab 2">
    		<ui:include src="panelInsideTab.xhtml">
    			<param name="param2" value="goodbye"/>
    		</ui:include>
    	</rich:tab>
     
    </rich:tabPanel>
    ...néanmoins les onglets doivent être ajoutés dynamiquement d'après les données contenues dans un backing-bean.
    J'ai essayé de boucler à l'aide du tag <ui:repeat>, malheureusement j'obtiens l'erreur suivante : "tab panel has no enabled or rendered tabs!"
    Apparemment il n'apprécie pas trop que le tag <ui:repeat> se mette entre le tabPanel et les tabs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <rich:tabPanel>
           <ui:repeat value="#{tabBean.list}" var="tab">
    	       <rich:tab label="#{tab.name}">
    		       <ui:include src="panelInsideTab.xhtml">
    			       <param name="param1" value="#{tab.message}"/>
    			</ui:include>
    		</rich:tab>		
    	</ui:repeat>
    </rich:tabPanel>
    J'ai ensuite essayé de déléguer la construction du tabPanel dans une classe Java...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <rich:tabPanel binding="#{tabBean.tabPanel}"/>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public HtmlTabPanel getTabPanel() {
     
    	tabPanel = new HtmlTabPanel();
     
    	HtmlTab tab = null;
    	for (Person p : getList()) {
    		tab = new HtmlTab();
    		tab.setLabel(p.getName());			
     
    		tabPanel.getChildren().add(tab);
    	}		
    	return tabPanel;		
    }
    Dans ce cas, les onglets se construisent correctement. Par contre, je ne sais pas comment inclure une page dans ces onglets....

    Est-ce que quelqu'un aurait une piste ?...ou une meilleure approche ?

    Merci d'avance pour votre aide.

    Christo

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    salut,
    tu peux définir l'action pour chaque tab, et tu définis la navigation dans le faces-config..

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut
    Salut,

    Je te remercie pour ta réponse.....qui soulève d'autres questions :

    1) Je vois effectivement comment définir la navigation entre les écrans dans le faces-config.xml. Par contre, comment faire ça pour des onglets ?

    2) Où dois-je définir l'action ? Est-ce à l'aide de la méthode setAction() de la classe HtmlTab ?

    Merci beaucoup !!!!!!

    Chris

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    yes !!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2009
    Messages : 16
    Par défaut
    Si tu pouvais m'en dire un peu plus, ce serait sympa :-)

    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 HtmlTabPanel getTabPanel() {
    		
    	tabPanel = new HtmlTabPanel();
    		
    	HtmlTab tab = null;
    	for (Person p : getList()) {
    		tab = new HtmlTab();
    		tab.setLabel(p.getName());			
    			
    		tabPanel.getChildren().add(tab);
    
                    tab.getChildren().add(................);
    	}		
    	return tabPanel;		
    }
    Comment inclure une autre page xhtml dans l'onglet ?

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Je parlais de la navigation, lorsque tu clique sur action, tu peux naviguer sur une autre page..c'est le même principe que action dans un commandButton.
    pour ajouter une page xhtml, essaye d'utiliser la classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.ajax4jsf.component.html.Include

  7. #7
    Invité de passage
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 1
    Par défaut
    Bonjour,
    Par contre moi j'ai éssaié de faire un tabPanel dynamque de la même façon que vous avez procéder mais j'ai eu l'erreur suivante :

    erreur :
    tab panel has no enabled or rendered tabs!

    avez vous une idée ?
    Merci,

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Par défaut
    @christo976

    As-tu trouvé la solution à ton problème. Je suis dans le même cas que toi et ne parviens pas à utiliser le Include côté Bean.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Par défaut Ce n’est tout simplement pas possible
    Bon, et bien j’ai trouvé la solution moi-même. Enfin, la solution, c’est beaucoup dire, plutôt l’explication du dysfonctionnement. Sur la page de la documentation de a4j:include, je cite :
    6.6.3. Creating the Component Dynamically Using Java

    This component cannot be created dynamically.
    Je cherche un contournement, peut être en suivant cette voie.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Par défaut Une solution possible
    Pour ceux que ça intéresse, voilà une solution possible pour contourner le problème.

    Dans le xhtml, on utilise c:foreach (xmlns:c="http://java.sun.com/jstl/core") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <a:outputPanel id="tabPanel">
        <rich:tabPanel selectedTab="#{applicationController.selectedTab}">
            <c:forEach items="#{applicationController.openedTabs}" var="currentTab">
                <rich:tab id="#{currentTab.id}" name="#{currentTab.name}" label="#{currentTab.label}">
                    <a:include viewId="#{currentTab.viewId}" />
                </rich:tab>
            </c:forEach>
         </rich:tabPanel>
    </a:outputPanel>
    Ensuite, dans le backing bean, on a une liste d’onglets ouverts et on peut en ajouter via une méthode :
    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
    private void openUniqueTab(String tabName, String tabLabel, String tabContentId, String tabContentViewId, boolean setSelected) {
        if (tabName == null) {
            return;
        }
        PopulatedTab newTab = searchTab(tabName);
     
        if (newTab == null) {
            newTab = new PopulatedTab();
            newTab.setId(tabName);
            newTab.setName(tabName);
            newTab.setLabel(tabLabel);
            newTab.setViewId(tabContentViewId);
     
            openedTabs.add(newTab);    
            selectedTab = tabName;
        } else {
            if (selectedTab == null || !selectedTab.equals(tabName)) {
                selectedTab = tabName;
            }
        }
    }
    Et la classe PopulatedTab :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import org.richfaces.component.html.HtmlTab;
     
    public class PopulatedTab extends HtmlTab {
        private String viewId;
     
        public String getViewId() {
            return viewId;
        }
     
        public void setViewId(String viewId) {
            this.viewId = viewId;
        }
    }
    Voilà, c’est un contournement pas forcément génial mais qui fonctionne.

Discussions similaires

  1. [richfaces] tabPanel erreur javascript sur IE7
    Par Sniper37 dans le forum JSF
    Réponses: 3
    Dernier message: 14/03/2010, 19h39
  2. Réponses: 9
    Dernier message: 19/11/2009, 17h35
  3. création d'un rich:tabPanel dynamique
    Par sal.gass dans le forum JSF
    Réponses: 4
    Dernier message: 25/06/2009, 15h18
  4. [RichFaces] ajout dynamique d'actionListener
    Par Jexou dans le forum JSF
    Réponses: 0
    Dernier message: 15/01/2009, 12h13
  5. [.NET 2.0 + Ajax] TabPanel dynamique
    Par fix105 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 17/04/2007, 08h40

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