Як створити 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 тег з атрибутами >

Напишіть перше повідомлення!

Ви повинні увійти під своїм аккаунтом щоб залишати коментарі