Теперь теги можно создавать намного проще, не зная языка Java. Можно тег описать в определенном формате в виде хмл в файле *.tag, контейнер эти файлы умеет читать и создавать из них классы тегов.
Чтобы иметь доступ к этому тегу необязательно даже описывать его в дескрипторе тегов, можно просто указать путь на него из ссылки джееспе:
Хотя можно и что и более привычно пользоваться пользоваться ури, для этого нужно сослаться на файл из десриптора библиотеки тегов. Десприптор:
А вот само исользование такого тега в jsp:
Приступая к самому формату файла *.tag нужно понимать, что у нас в дескрипторе нет никакого описания кроме пути к файлу, и то возможный вариант, что даже не нужен деспритор. Поэтому все необходимые описания можно сделать только в одном месте - в самом файле. И как все настройки JSP-страницы, это можно сделать через директивы.
А вот более сложный пример. Вызов:
А вот сам таг-файл:
А вот пример как создавать переменные среды из тега, который определен тег-файлом:
Вот же сам файл, к тому нужно обратить внимание на то, что он сам не брезгует услугами других тегов, и как обычная джееспе может сослаться на библиотеку и использовать в своих целях ее теги:
Чтобы иметь доступ к этому тегу необязательно даже описывать его в дескрипторе тегов, можно просто указать путь на него из ссылки джееспе:
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
Хотя можно и что и более привычно пользоваться пользоваться ури, для этого нужно сослаться на файл из десриптора библиотеки тегов. Десприптор:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tag-file>
<name>tf</name>
<path>/WEB-INF/tags/tf.tag</path>
</tag-file>
</taglib>
А вот само исользование такого тега в jsp:
... <%@taglib prefix="my" uri="/WEB-INF/tlds/mytaglibrarydescriptor"%> ... <my:tf/>
Приступая к самому формату файла *.tag нужно понимать, что у нас в дескрипторе нет никакого описания кроме пути к файлу, и то возможный вариант, что даже не нужен деспритор. Поэтому все необходимые описания можно сделать только в одном месте - в самом файле. И как все настройки JSP-страницы, это можно сделать через директивы.
<%@tag description="put the tag description here" pageEncoding="UTF-8"%>
<%-- The list of normal or fragment attributes can be specified here: --%>
<%@attribute name="message"%>
<%-- any content can be specified here e.g.: --%>
<h2>${message}</h2>
А вот более сложный пример. Вызов:
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
...
<tags:panel color="#80ff80" bgcolor="#c0ffc0" title="Panel 2">
Second panel.<br/>
Second panel.<br/>
Second panel.<br/>
Second panel.<br/>
</tags:panel>
...
<tags:panel color="#8080ff" bgcolor="#c0c0ff" title="Panel 3">
Third panel.<br/>
<tags:panel color="#ff80ff" bgcolor="#ffc0ff" title="Inner">
A panel in a panel.
</tags:panel>
Third panel.<br/>
</tags:panel>
...
А вот сам таг-файл:
<%@ attribute name="color" %>
<%@ attribute name="bgcolor" %>
<%@ attribute name="title" %>
<table border="1" bgcolor="${color}">
<tr>
<td>>b>${title}</b></td>
</tr>
<tr>
<td bgcolor="${bgcolor}">
<jsp:doBody/>
</td>
</tr>
</table>
А вот пример как создавать переменные среды из тега, который определен тег-файлом:
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
...
<tags:displayProducts>
<jsp:attribute name="normalPrice">
Item: ${name}<br/>
Price: ${price}
</jsp:attribute>
<jsp:attribute name="onSale">
Item: ${name}<br/>
<font color="red"><strike>Was: ${origPrice}</strike></font><br/>
<b>Now: ${salePrice}</b>
</jsp:attribute>
</tags:displayProducts>
Вот же сам файл, к тому нужно обратить внимание на то, что он сам не брезгует услугами других тегов, и как обычная джееспе может сослаться на библиотеку и использовать в своих целях ее теги:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ attribute name="normalPrice" fragment="true" %>
<%@ attribute name="onSale" fragment="true" %>
<%@ variable name-given="name" %>
<%@ variable name-given="price" %>
<%@ variable name-given="origPrice" %>
<%@ variable name-given="salePrice" %>
<table border="1">
<tr>
<td>
<c:set var="name" value="Hand-held Color PDA"/>
<c:set var="price" value="$298.86"/>
<jsp:invoke fragment="normalPrice"/>
</td>
<td>
<c:set var="name" value="4-Pack 150 Watt Light Bulbs"/>
<c:set var="origPrice" value="$2.98"/>
<c:set var="salePrice" value="$2.32"/>
<jsp:invoke fragment="onSale"/>
</td>
<td>
<c:set var="name" value="Digital Cellular Phone"/>
<c:set var="price" value="$68.74"/>
<jsp:invoke fragment="normalPrice"/>
</td>
<td>
<c:set var="name" value="Baby Grand Piano"/>
<c:set var="price" value="$10,800.00"/>
<jsp:invoke fragment="normalPrice"/>
</td>
<td>
<c:set var="name" value="Luxury Car w/ Leather Seats"/>
<c:set var="origPrice" value="$23,980.00"/>
<c:set var="salePrice" value="$21,070.00"/>
<jsp:invoke fragment="onSale"/>
</td>
</tr>
</table>
Комментариев нет:
Отправить комментарий