Как создать JSTL тег

июня
10
2012
Метки: java jstl tag

Содержание

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

Напишите первое сообщение!

Вы должны войти под своим аккаунтом чтобы оставлять комментарии