Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Задание. С помощью пользовательских тегов организовать вывод корректного логотипа пользователя. Работу выполнить на основе практического занятия 3.

Практическое занятие 4. Пользовательские теги

 

В соответствии с определением в спецификации JSP библиотека тегов – это коллекция действий, инкапсулирующих некоторую функциональность, которые могут использоваться из страницы JSP. То есть, библиотека тегов представляет собой java-классы, реализующие определенную бизнес-логику в соответствии с Tag Libraries Interface (интерфейс библиотеки тегов).

Структура тегов напоминает структуру сервлетов, которые могут быть многократно использованы в течение цикла жизни тегов. Библиотека тегов включает один или несколько тегов-классов и XML-дескриптор, содержащий описание тегов и параметров, используемых тегами.

Для использования/создания библиотеки тегов необходимо разработать:

- класс (Tag handler class), обрабатывающий тег и определяющий его функциональные свойства;

- XML-файл – дескриптор библиотеки тегов Tag Library Descriptor (файл TLD) – связывающий наименование элементов описания тегов с их реализацией.

Кроме вышеуказанных составляющих библиотеки тегов необходимо выполнить еще два условия использования библиотеки тегов:

1. Зарегистрировать в дескрипторе поставки web.xml с помощью директивы описание месторасположения библиотеки тегов.
Пример описания библиотеки тегов templates.tld в дескрипторе поставки web.xml:

<taglib>
  <taglib-uri>/sdo<taglib-uri>
  <taglib-location>/WEB-INF/tlds/templates.tld</taglib-location>
</taglib>

2. После этого на странице JSP можно использовать ссылку на библиотеку следующим образом:

<%@ taglib uri="/sdo" prefix="sdo %>

3. На странице JSP с помощью директивы необходимо указать месторасположение файла TLD.
Пример описания библиотеки тегов templates.tld на странице JSP:

<%@ taglib uri=”/WEB-INF/tlds/usertags.tld" prefix="tag" %>

В данных примерах библиотека тегов templates.tld располагается в директории WEB-INF/tlds.

При компиляции страницы JSP в сервлет пользовательские теги преобразуются в действия над объектами серверной стороны. Интерфейсы и классы, с помощью которых создаются пользовательские теги, располагаются в пакете javax.servlet.jsp.tagext.

Пользовательские действия определяются согласно следующей структуре:

- открывающий тег – действие, выполняемое java-классом при открытии тега;

- тело действия;

- закрывающий тег – действие, выполняемое java-классом при закрытии тега.

Java-класс, обрабатывающий тег, может реализовывать один из следующих интерфейсов:

- Tag;

- IterationTag;

- BodyTag.

Интерфейс Tag

Интерфейс Tag, являющийся наиболее общим интерфейсом, поддерживает пользовательские действия в JSP и определяет следующие базовые методы, инициируемые контейнером:

- setter методы для инициализации переменных;

- doStartTag () – метод, определяющий начало обработки действия тега;

- doEndTag () (либо doFinally () при использовании интерфейса TryCatchFinally ()) – метод, определяющий окончание обработки действия тега.

Когда контейнер обнаруживает дескриптор пользователя, он вызывает методы setPageContext () и setParent () объекта, реализующего интерфейс Tag. Затем контейнер вызывает метод doStartTag (), определяя начало выполнения действия, и завершает его вызовом метода doEndTag ().

Интерфейс IterationTag

Интерфейс IterationTag расширяет интерфейс Tag, добавляя метод doAfterBody (), используемый для перезагрузки тела. Метод doAfterBody () вызывается после каждой загрузки с тем, чтобы определить, требуется ли следующая перезагрузка.

Интерфейс BodyTag

Интерфейс BodyTag расширяет интерфейс IterationTag, добавляя два новых метода для манипуляции с телом тега:

- setBodyContent () – метод, посылающий в буфер объект BodyContent;

- doInitBody () – метод, предоставляющий возможность обрабатывать буфер перед первой загрузкой в него тела тега.

Для обработчиков тегов можно использовать классы TagSupport, BodyTagSupport и TagExtraInfo в качестве базовых классов. Обработчик тега имеет доступ к API, позволяющему взаимодействовать с JSP-страницей. Входной точкой в API является объект контекста страницы javax.servlet.jsp.PageContext, через который обработчик тега может извлечь все другие внутренние объекты (запрос, сессию и приложение), доступные из JSP-страницы.

Использование тегов с атрибутами

Возможность использования тегов с атрибутами делает технологию использования библиотек тегов еще более гибкой. Обращение к пользовательскому тегу с атрибутами на странице JSP имеет следующий формат:

<prefix:tag_name attribute1='value1' attribute2='value2'.../>

 

Задание. С помощью пользовательских тегов организовать вывод корректного логотипа пользователя. Работу выполнить на основе практического занятия 3.

1. В папку WebContent – images вставить картинки с фотографиями администратора, пользователя, пользователя-женщины и пользователя-мужчины (картинки png).

2. Создать пакет by.bsac.customtags, а в нем класс PrintLogo.java:

 

package by.bsac.customtags;

 

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.TagSupport;

 

@SuppressWarnings("serial")

public class PrintLogo extends TagSupport{

public static final String ADMIN_IMAGE = "admin";

public static final String USER_IMAGE = "any-user";

public static final String IMAGE_PATH = "/PZ3/images/";

public static final String IMAGE_EXTENSION = ".png";

 

private boolean isAdmin;

 

public int doStartTag() throws JspException {

JspWriter out=pageContext.getOut();

try{

StringBuilder fullImagePath = new StringBuilder().append(IMAGE_PATH);

if (isAdmin) {

fullImagePath.append(ADMIN_IMAGE);

} else {

fullImagePath.append(USER_IMAGE);

}

fullImagePath.append(IMAGE_EXTENSION);

 

out.print(fullImagePath.toString());

}catch(Exception e){e.printStackTrace();}

 

return SKIP_BODY;

}

 

public boolean isAdmin() {

return isAdmin;

}

 

public void setIsAdmin(boolean isAdmin) {

this.isAdmin = isAdmin;

}

 

}

 

3. В папке WEB-INF – lib создать custom.tld:

<?xml version= "1.0" encoding= "ISO-8859-1"?>

<!DOCTYPE taglib

PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

"http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">

 

<taglib>

 

<tlib-version>1.2</tlib-version>

<jsp-version>2.0</jsp-version>

<short-name>c</short-name>

<uri>bsac</uri>

 

<tag>

<name>printUserLogo</name>

<tag-class>by.bsac.customtags.PrintLogo</tag-class>

<attribute>

<name>isAdmin</name>

<required>true</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

</tag>

</taglib>

 

4. Внести дополнения в home.jsp:

<%@ page language= "java" contentType= "text/html; charset=UTF-8"

pageEncoding= "UTF-8" %>

<%@ taglib uri= "http://java.sun.com/jsp/jstl/core" prefix= "c" %>

<%@ taglib uri= "bsac" prefix= "m" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" >

<title>Home</title>

</head>

<body>

<h1>

Hello,

<%=session.getAttribute("user")%>

</h1>

<img src= ' <m:printUserLogo isAdmin="${isAdmin}"/> ' width= "64" height= "64" />

<c:if test= " ${isAdmin} " >

<p><a href= "allUsers.jsp" >View all users</a></p>

</c:if>

<form action= "logout" method= "post" >

<input type= "hidden" name= "authAction" value= "logout" > <input

type= "submit" value= "Logout" />

</form>

</body>

</html>

 

5. Структура проекта:

 

 

Индивидуальные задания:

 

1. Расширить модель данных Person новым свойством gender. Внимание: внесите изменение в классе SimplePersonDAOImpl.java (gender сделайте по аналогии с PersonRole, т.е. с помощью enum). Если логиниться пользователь женского пола, то отображаться должна картинка с женщиной; если мужчина – картинка с мужчиной; если администратор – картинка с администратором и т.д.

2. В allUsers.jsp отображение таблицы users сделать с помощью пользовательских тегов.

3. * Сверстать страницу home.jsp «красиво».

 

 

Можно почитать: http://www.cyberguru.ru/java/java-jsp-library.html

 

http://javatutor.net/articles/custom-tags-in-jsp-pages

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...