ATTENTION : Tutorial en cours d'écriture ! N'hésitez pas à nous signaler toute erreur ou suggestion.
Accès rapide : Utilisation sous forme de composant JWT Utilisation sous forme de composant Ellipse
L'utilisation d'onglets peut être très utile dans le cadre d'applications Web. Le framework Ellipse vous fourni donc ce type de composant. Comme à chaque fois, le framework Ellipse trouve sont inspiration dans la librairie Java Swing. Qui plus est, vous pouvez utiliser les onglets soit sous forme de composants JWT (en Javascript), soit sous forme de composants Web Ellipse. Reprenons ces deux possibilités une à une.
Bien entendu, avant d'exploiter la librairie JWT(Javascript Widget Toolkit - partie client du framework Ellipse) , il est nécessaire de charger le coeur de cette librairie en mémoire (notamment, pour avoir accès à la fonction importPackage). L'extrait de code suivant montre comment réaliser cette étape au sein d'une page HTML(HyperText Markup Language) standard. Notez, bien entendu, que si vous utilisez une page Web Ellipse, cette inclusion de script est réalisée automatiquement : il ne faut donc surtout pas la rejouer une seconde fois.
importPackage
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
<html> <head> <title>JWT library is used in a simple HTML page</title> <!-- You can specify the root of the JWT library. By default this variable is set with this value. var __APPLICATION_PATH__ = "./"; --> <!-- Load JWT core library: should be loaded once --> <script language="Javascript" src="corelib/services/web/javascript/Core.js"> </script> <!-- Load the default JWT CSS styles --> <link rel="stylesheet" type="text/css" href="corelib/services/web/javascript/jwt/Jwt.css" /> </head> <body> <!-- Your page content --> </body> </html>
Pour utiliser des onglets en tant que composant JWT, il faut commencer par inclure le fichier Javascript qui définit ce type de composants : corelib/services/web/javascript/jwt/TabbedPane.js. Pour cela, utiliser la fonction importPackage : notez que cette fonction est sécurisée : si d'une manière ou d'une autre le fichier considéré est déjà chargé en mémoire, le second appel sera sans effet.
corelib/services/web/javascript/jwt/TabbedPane.js
1
importPackage( "corelib/services/web/javascript/jwt/TabbedPane.js" );
Ensuite, il faut définir la structure de la page HTML qui va héberger votre composant de type TabbedPane. A ce sujet, il faut savoir que pour chaque onglet, pour pouvez y associer soit un autre composant JWT, soit un noeud du DOM HTML (dit autrement un tag HTML). L'exemple qui suit, va générer deux composants <TabbedPane> positionnés l'un en dessous de l'autre. Le TabbedPane du haut contiendra trois onglets et celui du bas deux onglets. Notez aussi que dans le composant du haut, le troisième onglet sera associé à un noeud du DOM HTML. D'ou le <div id="oneHtmlPane">.
TabbedPane
<TabbedPane>
<div id="oneHtmlPane">
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 33 34
<html> <head> <title>JWT TabbedPane samples</title> <script language="Javascript" src="corelib/services/web/javascript/Core.js"></script> <script language="Javascript" src="TabbedPaneSample.js"></script> <link rel="stylesheet" type="text/css" href="corelib/services/web/javascript/jwt/Jwt.css" /> <style> body { padding: 0px; margin: 0px; } h1 { text-align: center; } </style> </head> <body> <h1 style="text-align:center">JWT TabbedPane samples</h1> <br/> <center> <div id="center" style="width: 60%; height: 300px"></div> <br/><br/> <div id="center2" style="width: 60%; height: 300px"></div> </center> <div id="oneHtmlPane"> This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. This div is injected in a tab of the TabbedPane. </div> </body> </html>
Maintenant, il nous faut mettre en place le code Javascript. Notez que la génération et l'injection des onglets dans les tags HTML sont réalisées qu'au terme du chargement complet de la page Web (ajout d'un gestionnaire d'événements déclenchant au onload).
onload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
importPackage( "corelib/services/web/javascript/jwt/Calendar.js" ); importPackage( "corelib/services/web/javascript/jwt/TabbedPane.js" ); importPackage( "corelib/services/web/javascript/jwt/RssStreamViewer.js" ); addEventHandler( window, "onload", function() { // First TabbedPane with PLACEMENT_TOP alignment var tabbedPane = new TabbedPane( TabbedPane.PLACEMENT_TOP ); tabbedPane.add( new Calendar(), "Calendar" ); tabbedPane.add( new RssStreamViewer( "./News.xml", 4, 0 ), "RssStreamViewer" ); tabbedPane.add( document.getElementById( "oneHtmlPane" ), "Simple HTML elements" ); tabbedPane.injectInDocument( document.getElementById( "center" ) ); addEventHandler( tabbedPane, "onTabChanged", function() { document.title = "Tab changed"; }); // Second TabbedPane with PLACEMENT_BOTTOM alignment tabbedPane2 = new TabbedPane( TabbedPane.PLACEMENT_BOTTOM ); tabbedPane2.add( new Calendar(), "Calendar" ); tabbedPane2.add( new RssStreamViewer( "./News.xml", 4, 0 ), "RssStreamViewer" ); tabbedPane2.injectInDocument( document.getElementById( "center2" ) ); });
Vos onglets peuvent, pour l'heure, être positionnés à deux endroits dans le composant TabbedPane : soit en haut, soit en bas. Dans l'exemple précédent, les deux possibilités sont utilisées. Voici le résultat produit par cet exemple.
Bien entendu, les onglets JWT ont été encapsulés dans des tags web Ellipse. Les avantages de cette technique sont multiples : simplification importante de l'utilisation des composants de type TabbedPane, possibilité d'utilisation du moteur de "Data Binding" d'Ellipse (moteur de liaisons aux données côté serveur), ...
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 33 34 35 36 37 38 39 40 41
<?xml version="1.0" encoding="ISO-8859-1" ?> <web:Html xmlns:web="corelib.services.web.components" codeBehind="corelib.services.web.webapplications.WebPage"> <head> <title>TabbedPane Samples</title> <link rel="stylesheet" type="text/css" href="corelib/services/web/javascript/jwt/Jwt.css" /> </head> <body> <h1 align="center">TabbedPane Samples</h1> <center> <web:TabbedPane tabPlacement="top" cssStyle="width: 80%; height:400px"> <web:Tab name="First"> <web:Calendar /> </web:Tab> <web:Tab name="Second"> <div style="background: white; vertical-align: middle"> <h2>This part is a HTML block.</h2> <p> A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. </p> </div> </web:Tab> <web:Tab name="Third"> <web:Calendar /> </web:Tab> </web:TabbedPane> </center> </body> </web:Html>
Voici le résultat produit par l'exemple précédent. Trois onglets vous sont proposés : le premier affiche un composant JWT de type <web:Calendar>, le second affiche le contenu du tag <DIV> et enfin, le troisième affiche un autre calendrier.
<web:Calendar>
<DIV>
A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component. A little paragraph, just for test the SplitPane component.
Dominique LIARD - © 2007..2010 SARL Infini Software - Tous droits réservés Les autres marques et les noms de produits cités dans ces documents sont la propriété de leurs détenteurs respectifs.