Hlavní navigace

Vlastní TAGY v JSP

Vojtěch Patrný 19. 9. 2001

JSP je velice mocný nástroj na tvorbu webů, obsahuje například také podporu pro vlastní tagy. O tom se může PHP nebo ASP zatím pouze zdát (i když nová verze ASP už má mít něco podobného). Jestli vás zajímá, jak na tuhle JSP vlastnost, čtěte dál.

Co se naučíme?

Vytvářet vlastní JSP tagy a používat je ve vlastních aplikacích. Tenhle návod ale nelze brát jako všeobjemný návod, jak vytvářet jakékoli tagy, projdeme jenom základní vlastnosti. Těm z vás, kterým to nestačí, doporučuji ještě java.sun.com.

Co bychom už měli umět?

  • Používat JSP alespoň na základní úrovni.
  • Být zvyklí na svůj JSP/servlet kontejner (například tomcat, který budeme používat my).
  • Chápat základy Javy. Pokud však chcete JSP custom tagy pouze používat, nemusíte ani to.

Příklad

Dejme tomu, že jsme e-magazín o programování pro web. Na našich stránkách budeme často zobrazovat úryvky HTML a jiných tagovacích jazyků. Ale v HTML nemůžeme zobrazovat znaky < a >, musíme je nahradit znaky &lt; a &gt;. Také bychom chtěli tagy zvýraznit nějakou barvou. Normálné bychom museli každý úryvek kódu upravovat ručně, což je pomalé a často přitom něco přehlédneme. Vytvoříme si tedy JSP tag, který to všechno udělá za nás (všechny příklady na této stránce byly upraveny právě tímto tagem).

Špinavá práce v javabeanu
Úryvek kódu javabeanu, který provádí tuto práci.

public String format(String doc, String tagcolor) {
    int length = doc.length();
    StringBuffer doc_buffer = new StringBuffer();
    String buff;
    for(int i=0; i<length; i++) {
        buff = String.valueOf(doc.charAt(i));
        if(buff.equals("<")) {
            buff = "<font color=\""+tagcolor+"\">&lt;";
        }
        else if(buff.equals(">")) {
            buff = "&gt;</font>";
        }
        else if(buff.equals("&")) {
            buff = "&amp;";
        }
        doc_buffer.append(buff);
    }
    return doc_buffer.toString();
}

Metoda nejdříve natáhne dokument(doc) a barvu, kterou mají mít zobrazované tagy (tagcolor). Vytvoří si StringBuffer, do kterého zapisuje výsledek. Poté projde celý dokument znak po znaku a případně znak nahradí HTML kódem, výsledek vrátí jako String.

Napojení javabeanu na tag

Tato metoda v třídě FormatTag zajišťuje volání javabeanu při použití tagu na stránce.

public int doEndTag() throws JspTagException {
    try {
        FormatBean format = new FormatBean();
        String doc = getBodyContent().getString();
        pageContext.getOut().write(format.format(doc, color));
    }
    catch (IOException e) {
        throw new JspTagException("hoops - chyba FormatTag "+e.toString());
    }

    return EVAL_PAGE;
}

Nejdříve iniciujeme FormatBean. Získáme text z těla tagu a jako výsledek vypíšeme upravený text z metody format();

Popis tagu

Tag library descriptor je XML dokument popisující tagy, má koncovku tld.

<?xml version="1.0" ?>

<!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>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>Format</shortname>

    <tag>
        <name>Format</name>
        <tagclass>FormatTag</tagclass>
        <attribute>
            <name>color</name>
        </attribute>
    </tag>
</taglib>

Začlenění tagu do kontejneru

Abyste mohli používat tento tag, musíte ho zahrnout do konfiguračního souboru web.xml.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

<web-app>
    <taglib>
        <taglib-uri>Format</taglib-uri>
        <taglib-location>/WEB-INF/FormatTag.tld</taglib-location>
    </taglib>
</web-app>

Taglib-uri je jméno knihovny a musí být unikatní pro celou web aplikaci.

Použití tagu v JSP stránce

V každé stránce, kde chcete použít tag, musíte nadefinovat hlavičku:

<%@taglib uri="Format" prefix="format"%>

Vlastní použití vidíte tady, atribut color je volitelný.

<format:Format color="#6a89fc">
<table>
    <tr><td>policko</td></tr>
</table>
</format:Format>

Všechny části příkladu najdete zazipovány tady.

Závěr

Vlastní tagy jsou určitě cestou budoucnosti, která se velice rychle stává součastností (PHP zamysli se :-). Řeší věčný problém mezi programátory a grafiky. Kdokoli, nic netušící o Javě, může rychle a bez větších problémů používat už hotové knihovny. A programátorům nehrozí, že grafik smaže ; a aplikace se zhroutí.
Existuje také projekt TagLibs, kde najdete tagy skoro na všechno.

Našli jste v článku chybu?

23. 9. 2001 18:25

Vojtěch Patrný (neregistrovaný)

Jsp custom tags jsou zatim docela nove(od jsp 1.1 tedy servlet 1.2), tudis jeste nejsou uplne rozsirene, ale je to urcite cesta budoucnosti. O tom svedci i ASP.NET.
Jestli ale PHP zvlada neco podobneho, omlouvam se phpkarum(byt vami stejne se naucim jsp).


23. 9. 2001 18:20

Vojtěch Patrný (neregistrovaný)

jasně že může

Root.cz: Telegram spustil anonymní blog Telegraph

Telegram spustil anonymní blog Telegraph

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

DigiZone.cz: Sat novinky: Fransat UHD Demo

Sat novinky: Fransat UHD Demo

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Měšec.cz: Golfové pojištění: kde si jej můžete sjednat?

Golfové pojištění: kde si jej můžete sjednat?

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí