Зміст
У цій статті буде розказано як створити власний найпростіший JSTL тег без тіла і атрибутів. Поступово ми розширимо приклад до повноцінного тега з тілом і статичними і динамічними атрибутами.
JSTL (JavaServer Pages Standard Tag Library) - в перекладі з англійської «стандартна бібліотека тегів JSP». Вона розширює специфікацію JSP, додаючи бібліотеку JSP тегів для загальних потреб, таких як розбір XML даних, умовна обробки, створення циклів і підтримка інтернаціоналізації. JSTL - кінцевий результат JSR 52.
Почнемо з найпростішого тега, який виводить необхідне повідомлення, в нашому випадку фразу "Hello World!". Для початку створимо файл /WEB-INF/helloworldTag.tld:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<short-name>seostella</short-name>
<uri>/WEB-INF/helloworldTag</uri>
<tag>
<name>helloworld</name>
<tag-class>com.seostella.jstl.HelloWorld</tag-class>
<body-content>empty</body-content>
<info>helloworld tag displayes Hello World string</info>
</tag>
</taglib>
Розберемо деякі ключові елементи цього файлу.
<name>helloworld</name>
- визначає назву тегу.
<tag-class>com.seostella.jstl.HelloWorld</tag-class>
- назва класу, який буде обробляти тег.
<body-content>empty</body-content>
- тег не міститиме тіла.
<info>helloworld tag displayes Hello World string</info>
- коротка інформація про тег.
Клас, який обробляє тег, представлений нижче:
package com.seostella.jstl;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class HelloWorld extends TagSupport{
private static final long serialVersionUID = 1L;
@Override
public int doStartTag() throws JspException {
try {
pageContext.getOut().print( "Hello World!" );
} catch(IOException ioException) {
throw new JspException("Error: " + ioException.getMessage());
}
return SKIP_BODY;
}
}
Суть цього обробника тегу проста: він повинен бути успадкований від javax.servlet.jsp.tagext.TagSupport і перевизначати як мінімум метод doStartTag().
Метод doStartTag() може повертати два значення:
Нас поки що не цікавить тіло тега, тому ми його не обробляємо, повертаючи методом значення SKIP_BODY.
От і все, наш тег створений. Щоб ним скористатися необхідно додати taglib в jsp-файл:
<%@ taglib uri="/WEB-INF/helloworldTag.tld" prefix="seostella"%>
І скористатися тегом:
<seostella:helloworld />
Повний jsp-файл може виглядати так:
<%@ taglib uri="/WEB-INF/helloworldTag.tld" prefix="seostella"%>
<%@ page session="false" pageEncoding="UTF-8"%>
<html>
<head>
<title>Hello World Tag</title>
</head>
<body>
<h1>Hello World Tag</h1>
<p><seostella:helloworld /><p>
</body>
</html>
Завантажити проект, що демонструє роботу цього тегу Ви можете за наступним посиланням - Завантажити helloworldtag.zip
У наступній статті розглянемо створення тега з атрибутами і тілом.
Як створити JSTL тег з атрибутами | > |