Bonjour, est il possible de gardé l'attribut key du tag layout:tab en session ? si oui comment faire ?
Merci
Version imprimable
Bonjour, est il possible de gardé l'attribut key du tag layout:tab en session ? si oui comment faire ?
Merci
ou plutot l'attribut selectedTabKeyName.
Merci
Salut,
D'après la doc Struts-Layout, ce n'est pas possible :
Pourquoi as-tu besoin de le mettre en session ?Citation:
fr.improve.struts.taglib.layout.util.TabsUtil.setCurrentTab(selectedTabKeyName, key, request, response)
Salut, ben en fait j'ai des onglets, layout:tabs, et j'ai un arbre. Lorsque je clique sur un élément de l'arbre cela m'affiche des informations dans mes onglets. J'ai une série de plusieurs onglets, log, erreur, etc....Lorsque je clique sur un élément de mon arbre qui possède un identifient j'ai les bonnes infos correspondant au noeud qui sont affiché dans mes onglets. Le problème c'est qu'a chaque fois que je clique sur un noeud de l'arbre, c'est le premier tab qui se réaffiche a chaque fois. Je voudrais pouvoir rester sur le tab ou j'était avant d'avoir cliqué sur le noeud. Par exemple je suis sur l'onglet log, j'affiche les log correspondant à un noeud. Je voudrais voir ensuite les logs correspondant à un autre noeud, mais lorsque je clique sur le noeud je revient sur le premier tab si mes tabs sont dans cet ordre erreur, log, je reviendrai sur l'onglet erreur a chaque fois que je clique sur un noeud de l'arbre.
Tu m'as compris en gros ? :lol:
Merci
Imaginons que tu aies ceci dans la jsp :
dans onglet1Action et onglet2Action, tu pourrais coder ceci :Code:
1
2
3
4
5
6
7
8 <layout:tabs styleClass="FORM" width="400" selectedTabKeyName="tab"> <layout:tab key="onglet1" href="onglet1Action.do?tabKey=onglet1"> <%@include file="tab1.jsp" %> </layout:tab> <layout:tab key="onglet2" href="onglet2Action.do?tabKey=onglet2"> <%@include file="tab2.jsp" %> </layout:tab> </layout:tabs>
et dans chaque Action correspondant à chaque noeud :Code:
1
2 String tabKey= request.getParameter("tabKey") ; request.getSession().setAttribute("tabKey",tabKey) ;
Ainsi, tu te positionnes toujours sur le dernier onglet sélectionné.Code:
1
2 String tabKey = (String) request.getSession().getAttribute("tabKey") ; if ( tabKey != null) { TabsUtil.setCurrentTab("tab",tabKey,request,response) ; }
A tester. Je pense que ça devrait fonctionner.;)
C'est curieux, par défaut, si tu réaffiches la même page, il se repositionne sur le dernier onglet quitté avec :
<layout:tabs .... selectedTabKeyName="groupeTab">
...
</layout:tabs>
Bien sûr, groupeTab doit être un nom unique (si tu as le même nom sur plusieurs pages, ça va poser problème...)
Sinon, la solution de c_nvy devrait fonctionner
A+
Dans ton code selectedTabKeyName ne devrait pas être tabKey aussi ?
Lorsque je fait request.getParameter("tabKey") ensuite je fais un System.out.println(tabKey), j'ai null.
Tu as quelle version de Struts-Layout ?
J'ai la dernière version.
Je pense que cela vient du fait qu'au niveau le plus haut j'ai déja 2 onglets.Citation:
C'est curieux, par défaut, si tu réaffiches la même page, il se repositionne sur le dernier onglet quitté avec :
un onglet Général et un onglet Détail.
Dans l'onglet Détail j'ai mon arbre et mes autres onglets. Lorsque je clique sur un noeud de mon arbre, l'action forward sur "maJsp.jsp?tab=Détail"
Ce n'est pas incompatible, du moment que tu as 2 noms différents pour l'attribut "selectedTabKeyName"
Il positionne l'information dans le request et dans un cookie, donc, normalement, tu te retrouves dans le dernier onglet (à moins d'utiliser TabsUtil.setCurrentTab(...) entre temps, bien sûr...)
A+
Maintenant j'ai deux noms différents : j'ai essayé de récupéré dans l'action de mon onglet avec request.getParameter("tabKey"); mais lorsque je veux afficher la String j'ai null...
Mes tab sont constitué de cette façon est ce que cela peut etre la cause de mon problème :
cette page jsp est elle même contenu dans un iframe.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <layout:tabs width="100%" selectedTabKeyName="tabKey" styleClass="FORM"> <layout:tab key="Etat" href="tabs2.jsp?tabKey=Etat" width="100" > <iframe name="IFEtat" src="etatTab.do" width="790" height="400" scrolling="yes" frameborder="0" align="bottom" style="background-color: #c0c0c0;">Le navigateur ne parvient pas à afficher la fenetre contenant l'arbre </iframe> </layout:tab> <layout:tab key="Commandes" href="tabs2.jsp?tabKey=Commandes" width="100"> <iframe name="IFCommandes" src="commandeTab.do" scrolling="yes" frameborder="0" align="bottom" width="790" height="400" style="background-color: #c0c0c0;">Le navigateur ne parvient pas à afficher la fenetre contenant l'arbre </iframe> </layout:tab> .....
C'est dans les Actions qu'il faut passer le paramètre tabKey.
Essaie comme ceci :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <layout:tabs width="100%" selectedTabKeyName="tabKey" styleClass="FORM"> <layout:tab key="Etat" href="tabs2.jsp" width="100" > <iframe name="IFEtat" src="etatTab.do?tabKey=Etat" width="790" height="400" scrolling="yes" frameborder="0" align="bottom" style="background-color: #c0c0c0;">Le navigateur ne parvient pas à afficher la fenetre contenant l arbre </iframe> </layout:tab> <layout:tab key="Commandes" href="tabs2.jsp" width="100"> <iframe name="IFCommandes" src="commandeTab.do?tabKey=Commandes" scrolling="yes" frameborder="0" align="bottom" width="790" height="400" style="background-color: #c0c0c0;">Le navigateur ne parvient pas à afficher la fenetre contenant l arbre </iframe> </layout:tab> ... <layout:tabs>
Salut c_nvy, merci pour ta correction c'est vrai que l'a je passe bien en paramètre la valeur de tabKey \o/, mais si l'on ne précise pas dans href de layout:tab le tabKey on ne peut pas changer de tab. Donc il faut passer la valeur à l'action et aussi dans l'attribut href. Enfin encore une fois un grand merci a toi pour ton aide et ta patience dans certain cas ;) (Je te dois au moins un resto. LoL).
Bon a +
Juste une derniere question :
dans l'action des tree node quand tu met if(tab!=null) tab représente quoi. C'est une valeur récupérée d'ou ?
Merci
Donc maintenant je n'arrive plus a changé de tab lol, je suis pas sorti de l'auberge. Une fois que je passe dans l'action des treenode plus moyen de changer de tab, a moin de fermer le navigateur. Je n'ai pas besoin de redémarrer le serveur, juste fermeture du navigateur suffit a ce que je puisse a nouveau changé de tab. J'ai pourtant pris soion de retirer de la session l'attribut tabKey dans toutes mes actions. T'aurais une idée ?
Salut !Citation:
Envoyé par david06600
Désolée, c'est une erreur de ma part. C'est parce que j'ai changé le nom de la variable tab en tabKey et j'ai oublié de la modifier dans le if.:oops:
Ok merci j'avais corrigé dslé d'avoir posté pour sa.
Je pense qu'il faut coder ceci :Citation:
Envoyé par david06600
dans chacune des Actions des noeuds et aussi dans chacune des Actions des onglets.Code:TabsUtil.setCurrentTab("tab",tabKey,request,response) ;
Est-ce bien ce que tu as fait ?
Action de l'onglet :
Action du noeud :Code:
1
2
3
4
5
6
7
8
9
10
11
12 tabKey = (String)request.getSession().getAttribute("tabKey"); System.out.println("Session : " + tabKey); if(tabKey != null) request.getSession().removeAttribute("tabKey"); // Récupération de l'attribut selectedTabKeyName. tabKey = request.getParameter("tabKey"); System.out.println("tabKey : " + tabKey); request.getSession().setAttribute("tabKey", tabKey);
jsp :Code:
1
2
3
4
5
6
7
8 String tabKey = (String) request.getSession().getAttribute("tabKey") ; System.out.println("TreebuildAction tabKey : " + tabKey); if(tabKey != null) { TabsUtil.setCurrentTab("tabDetail",tabKey,request,response); }
Une fois que je suis passé dans l'action du noeud, lorsque je clique sur un nouvel onglet, dans ma console il s'affiche toujours le nom du tab que j'ai sélectionné avant d'avoir cliqué sur le noeud.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <layout:tabs width="100%" selectedTabKeyName="tabDetail" styleClass="FORM"> <layout:tab key="Etat" href="tabs2.jsp?tabDetail=Etat" width="100" > <iframe name="IFEtat" src="etatTab.do?tabKey=Etat" width="790" height="400" scrolling="yes" frameborder="0" align="bottom" style="background-color: #c0c0c0;">Le navigateur ne parvient pas à afficher la fenetre contenant l'arbre </iframe> </layout:tab> <layout:tab key="Commandes" href="tabs2.jsp?tabDetail=Commandes" width="100"> <iframe name="IFCommandes" src="commandeTab.do?tabKey=Commandes" scrolling="yes" frameborder="0" align="bottom" width="790" height="400" style="background-color: #c0c0c0;">Le navigateur ne parvient pas à afficher la fenetre contenant l'arbre </iframe> </layout:tab>
lorsque je fait :
le tabKey est stocké dans un cookie? Il n' y a qu'en fermant le navigateur que je peux sélectionné a nouveau mes tab.Code:
1
2 setCurrentTab("tabDetail", tabKey, request, response);
Comme je l'ai dit précédemment, il faut aussi coder ceci :Citation:
Envoyé par david06600
dans l'Action de chaque onglet, de manière à changer l'onglet courant lorsque tu cliques sur un nouvel onglet.;)Code:TabsUtil.setCurrentTab("tabDetail",tabKey,request,response);
Oui peut etre mais cela ne marchera pas. Regarde dans l'action des mes onglets, j'ai un system.out.println("tabKey " + tabKey); juste aprés le request.getParameter("tabKey");
Et la en fait dans la sortie console je n'ai pas le tabKey correspondant à l'onglet sur lequel j'ai cliqué. Le tabKey reste le même que l'onglet que j'ai cliqué avant de passer dans l'action de mon noeud. Donc si le tabKey ne change lorsque je le récupère dans la requete, j'ai beau faire TabsUtils.setCurrentTab() sa ne changera pas. Ou il y a quelquechose que j'ai loupé ?
Et si, dans les Actions correspondant à chaque onglet, tu codes en dur la clé correspondant à chaque onglet à la place de tabKey :
Soit, dans l'Action de path etatTab, la clé étant égal à Etat :
et dans l'Action de path commandeTab :Code:TabsUtil.setCurrentTab("tabDetail","Etat",request,response);
Code:TabsUtil.setCurrentTab("tabDetail","Commandes",request,response);
En fait, il y a quelque chose qui ne va pas dans ton code.
Dans les Actions correspondant à chaque onglet, tu ne dois pas faire un getAttribute de tabKey mais seulement un getParameter et un setAttribute comme ceci :
Ainsi, tu récupères la valeur de la clé correspondant à l'onglet sélecté (celle passée en paramètre de l'Action), tu spécifies que c'est l'onglet courant et tu mets cette valeur en session pour permettre de récupérer le dernier onglet sélecté dans les Actions correspondant aux noeuds du treeview.Code:
1
2
3
4 String tabKey = request.getParameter("tabKey"); System.out.println("tabKey : " + tabKey); if ( tabKey != null) TabsUtil.setCurrentTab("tabDetail",tabKey,request,response) ; request.getSession().setAttribute("tabKey", tabKey);
et donc, dans les Actions correspondant aux noeuds de ton treeview :
Je pense que ça devrait fonctionner comme ceci, sans avoir à coder en dur les valeurs des clés correspondant à chaque onglet.;)Code:
1
2
3
4
5
6 String tabKey = (String) request.getSession().getAttribute("tabKey") ; System.out.println("TreebuildAction tabKey : " + tabKey); if(tabKey != null) { TabsUtil.setCurrentTab("tabDetail",tabKey,request,response); }
Bien essayé, mais sa ne passe pas. En fait des qu'on appelle la méthode setCurrentTab, on ne peut plus rien changé aprés.
Non sa ne fonctionne pas si je met un TabsUtil.setCurrentTab(...), en faisant cela j'ai toujours mon premier onglet qui reste affiché. Une fois que l'on a appelé la méthode setCurrentTab il n'est plus possible de changé. La seule solution est de fermer le navigateur, ce qui n'est pas une solution, mais bon une piste peut etre.
Je ne comprends pas parce que je viens de faire le test et ça fonctionne très bien.:?
Chez moi sa ne fonctionne pas. La je viens de mettre setCurrentTab(...) uniquement dans l'action de mes onglets, et je ne peux plus changé d'onglet une fois que le premier c'est affiché.:?
Voilà ce que j'ai codé :
Dans la jsp :
Dans les Actions des onglets, soient tab1Action et tab2Action :Code:
1
2
3
4
5
6
7
8 <layout:tabs styleClass="FORM" width="400" selectedTabKeyName="tabKey"> <layout:tab key="Onglet1" href="tab1Action.do?tabKey=Onglet1"> <%@include file="tab1.jsp" %> </layout:tab> <layout:tab key="Onglet2" href="tab2Action.do?tabKey=Onglet2"> <%@include file="tab2.jsp" %> </layout:tab> </layout:tabs>
Dans les Actions des noeuds du treeview :Code:
1
2
3 String tabKey = request.getParameter("tabKey") ; if ( tabKey != null) TabsUtil.setCurrentTab("tabKey",tabKey,request,response) ; request.getSession().setAttribute("tabKey", tabKey);
Code:
1
2 String tabKey = (String) request.getSession().getAttribute("tabKey") ; if ( tabKey != null) TabsUtil.setCurrentTab("tabKey",tabKey,request,response) ;
Oui je vois, j'ai encore différents essais, j'en vient à essayer tout et n'importe quoi, mais bon il ne veut rien savoir, une fois que j'ai appelé la méthode setCurrentTab(), le request.getParameter("tabKey") récupère toujours la même valeur de tab key. Je ne sais pas pourquoi....
Je viens de m'apercevoir que, dans ta jsp, tu as un paramètre tabDetail passé aux jsp et un paramètre tabKey passé aux Actions.:?
As-tu fait un test en donnant le même nom aux deux, soit celui affecté à la propriété selectedTabKeyName ?
En fait, en regardant ton code je me suis rendu compte que ma jsp était mal faite, voici mon code avec des modif inspiré de ton code :
et sa marche parfaitement maintenant. Encore merci a toi pour ton aide, et pour ta patience.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <layout:tabs width="100%" selectedTabKeyName="tabKey" styleClass="FORM"> <layout:tab key="Etat" href="etatTab.do?tabKey=Etat" width="100" > <iframe name="IFEtat" src="etat.jsp" width="790" height="400" scrolling="yes" frameborder="0" align="bottom" style="background-color: #c0c0c0;">Le navigateur ne parvient pas à afficher la fenetre contenant l'arbre </iframe> </layout:tab> <layout:tab key="Commandes" href="commandeTab.do?tabKey=Commandes" width="100"> <iframe name="IFCommandes" src="commandes.jsp" scrolling="yes" frameborder="0" align="bottom" width="790" height="400" style="background-color: #c0c0c0;">Le navigateur ne parvient pas à afficher la fenetre contenant l'arbre </iframe> </layout:tab>
De rien.;)
Ouf :D Je n'y croyais plus.:oops:
Ca n'a pas été facile mais on y est arrivé.;)
Bon courage pour la suite.