Как решить эту проблему с помощью расширения тега JSP?
-
22-08-2019 - |
Вопрос
Начиная с разработки JSP и сервлетов, у меня возникли некоторые проблемы с пользовательским тегом без тела, который нужно вставить на страницу JSP.
Сделанные шаги:
- Написал и успешно скомпилировал файл CustomTag.java (расширяющий
TagSupport
) вWEB-INF/classes
каталог; - Определил файл TLD на очень простом примере, включая
<body-content>
сempty
значение для тега без тела; - Использовал тег на странице JSP с директивой taglib, указывающей на мой
/WEB-INF/tlds/site.tld
файл.
Учитывая все это, знаете ли вы, почему Tomcat отправляет такую ошибку:
CustomTag не может быть преобразован в тип
Заранее благодарим за ваши ответы, и, пожалуйста, спросите, если вам нужна более подробная информация.
Вот мой файл 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/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>customlib</short-name>
<description>Custom library.</description>
<tag>
<name>header</name>
<tag-class>HeaderTag</tag-class>
<body-content>empty</body-content>
<description>...</description>
</tag>
</taglib>
JSP-файл:
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib uri="/WEB-INF/tlds/customlib.tld" prefix="clib" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>title</title>
</head>
<body>
<clib:header />
</body>
</html>
Класс HeaderTag:
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;
public class HeaderTag extends TagSupport {
public int doEndTag() throws JspTagException {
try {
pageContext.getOut().print("<p>header</p>");
}
catch (IOException e) {
throw new JspTagException("Error.");
}
return EVAL_PAGE;
}
}
Решение
Вы восстановили и передислоцировали, верно?В этом случае я могу предположить, что вы пропустили директиву <tag-class> в файле TLD.
<tag>
<name>cookieIterator</name>
<tag-class>util.infoTemplates.CookieIterator</tag-class>
<body-content>JSP</body-content>
</tag>
Если причина не в этом, опубликуйте файл TLD и пример JSP.
Редактировать:Все классы тегов должны иметь пакет.Согласно спецификации JSP 2.0 (раздел JSP 11.2):
Начиная с JSP 2.0, запрещено ссылаться на любые классы из безымянных (т.по умолчанию) пакет.