project:omega - o'reillynet-fr - jsp-servlets - fonctions avancées des librairies jsp de balises personnalisées

project:omega - o'reillynet-fr - jsp-servlets - fonctions avancées des librairies jsp de balises personnalisées livres et documentations outils téléchargements d'outils unix programmation cocoa serveurs web le terminal de mac os x le langage java carbon nouvelles mac dev objective-c iapplications le langage jsp et les servlets java technologie sans-fil le scripting système unix mozilla développer sur mac os x perl-ruby-python intégration mac os x - windows développement web maîtrise de mac os x guides techniques développement développement web le langage ruby portage d'applications vers mac os x webobjects meilleures astuces sélections logiciel de la semaine conchyo firestarter - gravure et copie de cd reveil documentation o'reillynet-fr tutoriels macosxhints-fr produits forums liens qui sommes-nous ? contribuer et participer soutenir l'association recevoir la news letter les statuts de l'association note : 2.250 expert (444 ko) 5621 1 - 2 dans la même série sommaire conseils pratiques pour servlet, partie 3 conseils pratiques pour servlet, partie 2 conseils pratiques pour servlet, partie 1 apprentissage de struts jakarta - partie 3 apprentissage de struts jakarta - partie 2 introduction à struts jakarta tour d’horizon des jsp - partie 1 les librairies jsp de balises personnalisées fonctions avancées des librairies jsp de balises personnalisées les derniers articles parus o'reillynet-fr-système unix ssh en détails, partie 2 o'reillynet-fr-maîtrise de mac os x qu'est ce que le firewire ? (et comment en tirer profit) tutoriels-développement vue d'ensemble de l'accessibilité o'reillynet-fr-maîtrise de mac os x mac os x pour le voyageur, partie 5 o'reillynet-fr-maîtrise de mac os x mac os x pour le voyageur, partie 4 tous les articles parus les dernières astuces osxfaq semaine 106 - nouveautés de tiger 06/01/2006 - vendredi - bien propre avec tidy 05/01/2006 - jeudi - encore plus de commandes 04/01/2006 - mercredi - syntaxe colorée dans nano 03/01/2006 - mardi - pico devient nano 02/01/2006 - lundi - de zcat à gzcat toutes les astuces parues nos articles « coup de coeur » portage d'applications vers mac os x-portage d'applications basées sur l'api win32 vers mac os x portage d'applications vers mac os x-guide de portage unix webobjects-qu'est-ce que webobjects ? développement-les outils de développement de mac os x développement-apprendre l'objective-c livres recommandés servlets et jsp java in a nutshell - o'reilly introduction à java - o'reilly exemples en java in a nutshell, 2e édition - o'reilly thinking in java total java mac os x à 200% project:omega soutient mozilla ! project:omega soutient openoffice ! 1 - 2 project:omega >>> o'reillynet-fr >> le langage jsp et les servlets java > fonctions avancées des librairies jsp de balises personnalisées fonctions avancées des librairies jsp de balises personnalisées par sue spielman, 18/01/2001 traduit par thierry, 20/08/2002   dans cet article, le second de la série se rapportant aux librairies de balises personnalisées, nous allons découvrir des fonctions avancées et les moyens de s'en servir. si vous n'êtes pas très à l'aise avec les librairies de balises, passez quelques minutes à lire l'article précédent, if you aren't familiar with tag libraries, spend a few minutes reading the previous article, concevoir des librairies de balises personnalisées.   dans cet article vous allez découvrir :   les interactions entre les containers jsp et les balises, les balises dotées de corps, les balises imbriquées, les informations extra-balise, et les balises coopératives.   toutes les classes et les interfaces discutés ici proviennent du package javax.servlet.jsp ou javax.servlet.jsp.tagext. les interactions du container jsp avec les balises si l'on veut se servir des fonctionnalités avancées des librairies de balises il est important d'avoir une compréhension basique de la manière dont le container jsp interagit avec les classes gestionnaires de balises. nous allons d'abord aborder ceci avant de passer à l'utilisation de ces fonctionnalités avancées. l'interface balise l'interface balise (tag interface) définit le protocole basique utilisé entre un gestionnaire de balises et un container jsp. il définit le cycle de vie et les méthodes à invoquer au moment où les balises "start" et "end" d'une action sont rencontrées. le container jsp invoque les méthodes setpagecontext, setparent, et celle de réglage des attributs avant d'appeler dostarttag. le container garantit aussi qu'une destruction sera effectuée dans le gestionnaire de balises avant la fin de la page. une séquence typique d'appel de méthode de gestionnaire de balises pourrait ressembler à ceci : sometag tag = new sometag(); tag.setpagecontext(...); tag.setparent(...); tag.setattribute1(value1); tag.setattribute2(value2); tag.dostarttag(); tag.doendtag(); tag.release(); la méthode "release" du gestionnaire de balises devrait réinitialiser son état et détruire toute ressource privée qu'il aurait pu utiliser. en temps normal, il n'est pas nécessaire de surpasser ("override") l'implémentation de base de la classe. l'interface corps de balise si une balise tire son origine d'un bodytagsupport, il y a des méthodes supplémentaires -- setbodycontent, doinitbody, et doafterbody -- contenues dans l'interface corps de balise (bodytag interface). ces méthodes permettent à un gestionnaire de balise d'accéder à son corps. le corps d'une balise est tout ce qui est contenu entre le début et la fin d'une balise. l'objet bodycontent est une sousclasse de jspwriter, qui représente la classe chargée de l'écriture utilisée en interne pour les variables jsp. l'objet bodycontent est disponible via la variable bodycontent dans doinitbody, doafterbody, et doendtag. cet objet est essentiel parce qu'il contient des méthodes que vous utiliser pour écrire, lire, effacer et acquérir du contenu et l'incorporer dans le jspwriter original durant le doendtag. nous verrons cela plus tard quand nous explorerons un bout de code. le setbodycontent crée un contenu de corps et l'ajoute au gestionnaire de balises. le doinitbody n'est appelé qu'une fois avant l'évaluation du corps de la balise, il est habituellement utilisé pour effectuer les initialisations qui dépendent du contenu du corps de la balise. si doafterbody renvoie eval_body_tag, le corps entier de la balise est de nouveau évalué. sinon, skip_body est renvoyée pour indiquer que l'évaluation du corps de la balise est terminée. un gestionnaire typique de balises dérivé de bodytagsupport comprendrait la séquence d'appel de méthodes suivante, à partir du container jsp : tag.dostarttag(); out = pagecontext.pushbody(); tag.setbodycontent(out); // effectue les initialisations nécessitées après que le contenu du corps // ait été évalué tag.doinitbody(); tag.doafterbody(); // tant que doafterbody renvoie eval_body_tag nous recommençons // l'évaluation du corps ... tag.doafterbody(); tag.doendtag(); tag.pagecontext.popbody(); tag.release(); utilisation de balises à corps l'utilisation de balise qui évalue un corps permet d'effectuer des boucles. cela peut devenir une fonction puissante notamment pour traiter des ensembles de données provenant d'une base de données ou d'autres types de données sous forme de suite. au moment de définir une balise qui utilise une corps, il y a deux étapes de base. premièrement, la définition de la balise inscrite dans le fichier tld doit positionner <bodycontent> à "jsp" ou dépendant de la balise ("tagdependent"). "jsp" indique que le corps est évalué par le container jsp et peut donc ensuite être traité par la balise elle-même. tagdependent indique que le corps n'est traité que par la balise. l'élément du tld ressemble à : <tag> ... <bodycontent>jsp|tagdependent</bodycontent> </tag> deuxièmement, il faut dériver la balise de bodytagsupport. bodytagsupport est la classe assistante de l'interface bodytag, donc, techniquement, vous n'avez pas à implémenter n'importe quelles méthodes puisqu'elles sont implémentées par défaut. cependant, il se pourrait plutôt que vous soyer amené à en surpasser une ou toute pour effectuer des traitements spécifiques à votre balise. la manière d'implémenter un gestionnaire de balises pour une balise comprenant un corps dépend de la nécessité d'interaction du gestionnaire avec le corps, où "interagir" veut dire que le gestionnaire lit ou modifie les contenus du corps ou provoque des évaluations répétées du corps. si le gestionnaire interagit avec le corps, la valeur de retour skip_body indique que le container jsp n'a pas à évaluer le code contenu à l'intérieur du corps de la balise. la valeur eval_body_tag n'est possible que si la classe est une extension de bodytagsupport. si le gestionnaire n'a pas besoin d'interagir avec le corps, il doit alors implémenter l'interface de balise (tag interface) ou être dérivé de tagsupport. si le corps de la balise nécessite d'être évalué, la méthode dostarttag doit retourner eval_body_include; sinon elle doit retourner skip_body. si le gestionnaire doit interagir avec le corps, il doit alors implémenter l'interface de corps de balise (bodytag interface) ou être dérivé de bodytagsupport. habituellement, de tels gestionnaires implémentent les méthodes doinitbody et doafterbody. ces méthodes interagissent avec le contenu du corps passé au gestionnaire de balise par le container jsp. la méthode dostarttag doit retourner eval_body_tag; sinon elle doit renvoyer skip_body. (ndt : ouf !)   voyons ensemble un exemple rapide qui illustre l'interaction d'une balise avec un corps. cet exemple comprendra la définition de balise inscrite dans le tld, le gestionnaire de balises et, finalement, la page jsp qui appelle la balise. pour un exemple complet de fichier tld, consultez la première partie de cette série d'articles (librairies jsp de balises personnalisées).   la définition de cette balise dans le tld ressemble à : <tag> <name>paramloop</name> <tagclass>oreilly.examples.paramlooptag </tagclass> <!-- autorise l'insertion d'un corps pour cette balise --> <bodycontent>jsp</bodycontent> <info> this is a simple tag to demonstrate how to include and evaluate the body of a tag </info> <!-- required attributes --> <attribute> <name>enum</name> <required>true</required> <rtexpvalue>true</rtexpvalue> </attribute> </tag> le bout de code suivant est un gestionnaire de balises qui affiche tous les paramètres de la requête dans une table et qui interagit avec le corps : import java.util.enumeration; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; import java.io.ioexception; public class paramlooptag extend bodytagsupport{ enumeration enum=null; public void setenum(enumeration enum){ this.enum = enum; } public int dostarttag() throws jspexception{ return eval_body_tag; } public void doinitbody() throws jspexception{ if (enum != null){ if (enum.hasmoreelements()){ pagecontext.setattribute("nextparamname", enum.nextelement()); } } public void doafterbody() throws jspexception{ if (enum.hasmoreelements()){ pagecontext.setattribute("nextparamname", enum.nextelement()); // on continue la boucle return eval_body_tag; } else { // on a fini return skip_body; } } public int doendtag() throws jspexception{ try { // obtient le bodycontent courant de cette balise et // l'écrit via le jsp writer original pagecontext.getout().print(bodycontent.getstring()); return eval_page; } catch (ioexception ioe){ throw new jspexception(ioe.getmessage()); } } } le code jsp qui utilise cette balise ressemble à : <html> <body> <%@ taglib uri="/oreillysample.tld" prefix="sample" %> <h1>sample tag using body interaction</h1> <table border="2"> <tr> <th>parameter name</th> <th>parameter value</th> <sample:paramloop enum="<%=request.getparameternames() %>" > <tr> <%-- par simplicité, nous ne faisons aucun test d'erreur ici et nous affichons la première valeur --%> <% string paramname = (string)pagecontext.getattribute("nextparamname"); %> <td> <%= paramname %> </td> <% string[] paramvalues = request.getparatmervalues(paramname); %> <td><%= paramvalues[0] %> </tr> </sample:paramloop> </table> </body> <html> la table produite par l'exécution de cette balise en supposant deux paramètres en entrée (personne et compagnie) ressemblerait à :   nom du paramètre valeur du paramètre personnne sue compagnie switchback software       project:omega : la référence pour les développeurs mac os x et plus encore ! documentation  |  o'reillynet-fr  |  tutoriels  |  macosxhints-fr  |  produits  |  forums  |  liens copyright © 2001-2004 projectomega.org, association à but non lucratif. tous droits réservés. toutes les marques déposées et tous les logos apparaissant sur projectomega.org sont la propriété de leurs sociétés respectives. pour tout problème ou assistance à propos de ce site, contactez : webmaster@projectomega.org pour tout autre propos : contact@projectomega.org hosting : netsample.net | macgeneration.com | projectomega.com - design : projectomega.com

project:omega - o'reillynet-fr - jsp-servlets - fonctions avancées des librairies jsp de balises personnalisées  Précédent 593  Précédent 592  Précédent 591  Précédent 590  Précédent 589  Précédent 588  Précédent 587  Précédent 586  Précédent 585  Précédent 584  Précédent 583  Précédent 582  Précédent 581  Précédent 580  Précédent 579  Précédent 578  Précédent 577  Précédent 576  Précédent 575  Précédent 574  Précédent 573  Précédent 572  Précédent 571  Précédent 570  Précédent 569  Précédent 568  Précédent 567  Précédent 566  Précédent 565  Précédent 564  Suivant 595  Suivant 596  Suivant 597  Suivant 598  Suivant 599  Suivant 600  Suivant 601  Suivant 602  Suivant 603  Suivant 604  Suivant 605  Suivant 606  Suivant 607  Suivant 608  Suivant 609  Suivant 610  Suivant 611  Suivant 612  Suivant 613  Suivant 614  Suivant 615  Suivant 616  Suivant 617  Suivant 618  Suivant 619  Suivant 620  Suivant 621  Suivant 622  Suivant 623  Suivant 624