Содержание
В этой статье будет рассказано как создать собственный простейший 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 тег с атрибутами | > |