Samotná značka je dobrá vec, pretože zjednodušuje tvorbu stránok a umožňuje oddeliť prácu programátora a dizajnéra stránky. Na druhej strane nestačí značku len vložiť na stránku a „čakať čo sa stane“. Programátor musí špecifikovať, akým spôsobom bude tá ktorá značka použitá, aké má mať atribúty, ktoré sú povinné a ktoré nie a v neposlednom rade určiť kde sa nachádza trieda, ktorá spracuje značku.

Tag Library Descriptor – TLD

Druhým dôležitým krokom pri tvorbe značiek je špecifikovať, ako budú použité serverom v čase prekladu stránky. Aby bola značka správne spracovaná, musí server vedieť, či má značka atribúty alebo telo, prípadne jedno aj druhé. Tieto informácie sú uložené v štandardnom XML súbore, ktorý sa volá Tag Library Descriptor a má koncovku tld. Štruktúra tohto dokumentu vychádza z web-jsptaglibrary_1_1.dtd.

TLD má pomerne jednoduchú štruktúru a môže obsahovať celkovo 14 elementov, niektoré sa môžu opakovať. Elementom na najvyššej úrovni je <taglib> </taglib>, pričom tento element môže obsahovať viacej elementov <tag></tag>. Vzorový súbor tld môže vyzerať nasledovne:

<?xml version=“1.0″ encoding=“ISO-8859-1″ ?>
<!DOCTYPE taglib
 PUBLIC „-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN“
 „http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd“>

<taglib>
 <tlibversion>2.0</tlibversion>
 <jspversion>1.1</jspversion>
 <shortname>Name of taglib</shortname>
 <uri>http://someserver.net/taglibs/taglib2.5</uri>
 <info>Info about taglib</info>

 <tag>
  <name>Name of tag</name>
  <tagclass>package.TagClass</tagclass>
  <teiclass>package.TEITagClass</teiclass>
  <bodycontent>tagdependent | JSP | empty</bodycontent>
   <attribute>
    <name>Name of attribute</name>
    <required>true | false</required>
    <rtexprvalue>true | false</rtexprvalue>
   </attribute>
 </tag>
</taglib>

Poďme si teda vysvetliť význam jednotlivých elementov:

  1. <tlibversion>
    Element udáva číselnú verziu knižnice užívateľských značiek. Podobne ako nasledujúci element.
  2. <jspversion>
    Tento element udáva verziu špecifikácie JSP na ktorej je knižnica postavená.
  3. <shortname>
    Ako napovedá preklad, ide o krátke a výstižné meno, ktoré použijem na pomenovanie mojej knižnice. Ako názov sa často používa prefix v direktíve <%@taglib uri="..." prefix="shortname"%>.
  4. <uri>
    Je identifikátor zdroja. Tento element je nepovinný, môžete ho nechať prázdny.
  5. <info>
    Mal by obsahovať stručný popis knižnice a tiež je nepovinný.
  6. <tag>
    Jednoznačne identifikuje unikátny tag v príslušnej knižnici. Je povinný a zapuzdruje nasledujúce elementy.
  7. <name>
    Unikátny názov značky v celej knižnici. Je povinný.
  8. <tagclass>
    Sem treba uviesť plne kvalifikované meno triedy, ktorá spracováva túto značku (Tag handler). Táto trieda musí byť odvodená z javax.servlet.jsp.tagext.Tag. Tento element je pochopitelne povinný.
  9. <teiclass>
    Tento element je voliteľný a musí obsahovať plne kvalifikované meno triedy odvodenenej z javax.servlet.jsp.tagext.TagExtraInfo. Táto trieda poskytuje doplnkové informácie o značke, ktorá ako atribút definuje premennú. Element je povinný v prípade, ak takúto značku použijete.
  10. <bodycontent>
    Tento element môže obsahovať tri rôzne hodnoty:
    • tagdependent – znamená, že značka obsahuje telo a toto telo sa bude spracovávať. Túto možnosť možete použiť na vloženie napr. SQL príkazu.
    • JSP – ak uvediete takúto hodnotu, znamená to, že značka má telo, ale nebudem ho spracovávať.
    • empty – znamená, že telo značky musí byť prázdne.

    V prípade že element <bodycontent> neuvediete, defaultna hodnota je JSP.

  11. <attribute>
    Definuje atribút danej značky. Môže byť použitý viackrát, pre každý atribút značky zvlášť. Zapuzdruje nasledovné elementy.
  12. <name>
    Je meno atribútu, používa sa v <tagPrefix:tag_name name="value"/>.
  13. <required>
    Určuje, či je atribút povinný (true) alebo nepovinný (false). Defaultna hodnota je false.
  14. <rtexprvalue>
    Určuje, či hodnota atribútu je daná statickým reťazcom (false) alebo pomocou JSP výrazu (true), ktorý bude vyhodnotený v čase požiadavky na stránku.

V podstate na súbore TLD nie je nič komplikované, treba len dodržať hierarchiu jednotlivých elementov, pretože každý z nich má svoj presný význam. A tiež ho nezabudnúť na stránku JSP pomocou príslušnej direktívy naimportovať. Elementy, ktoré nie sú povinné netreba uvádzať, prípadne ich ponechať prázdne. Samotný tld súbor môžete umiestniť na ľubovolné miesto, alebo je jeho umiestnenie pevne dané v dokumentácii k aplikačnému serveru. Konkrétne pre Tomcat 4.x je zvykom umiestniť súbory tld do adresára WEB-INF, prípadne WEB-INF/tld.

Spolupráca medzi značkami

Užívateľské značky, ktoré si vytvoríte, môžete samozrejme do seba navzájom vkladať. Ale vždy musí byť jeden tag zapuzdrujúci iný/iné tagy. Uvediem príklad:

<prefix:top_tag>
 <prefix:inner_tag1>
  body …
 </prefix:inner_tag1>
 <prefix:inner_tag2>
   <prefix:inner_tag2.1/>
 </prefix:inner_tag2>
</prefix:top_tag>

Všimnite si, že značky sa neprekrývajú. Je to podobné ako html tag <td> definujúci bunku tabulky. Tiež môže byť použitý len vo vnútry tagu <tr>.

Každý tag môže obsahovať atribúty, ale pozor, použité tagy musia byť „tagy s telom“. To znamená, že v tld súbore musia mať definovaný element <bodycontent>. Server potom začne spracovávať ako prvú značku tú, ktorá je vnorená najhlbšie, resp. tú, ktorá už neobsahuje v sebe žiadnu inú značku. Takto postupuje po jednotlivých úrovniach vyššie, až spracuje značku na najvyššej úrovni. V našom prípade je to značka <prefix:top_tag>. Avšak značky môžu spolupracovať aj iným spôsobom, napríklad zdieľaním objektov. O tom podrobnejšie v budúcej časti.

Aj v tomto diely ponúkam jednoduchý príklad na stiahnutie a preštudovanie. Môžete si vybrať verziu zip vrátane zdrojových textov alebo hotovú webovú aplikáciu ako webový archiv war.

Na záver vám ponúkam možnosť vyskúšať si príklad on-line.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět