Invalid tld file see JSP specification section 7.3.1 for more details когда оставляю линк на tld в jsp
Я создал tag library descriptor ( tld ) и поместил его в папку WEB-INF/tags/.
Он выглядит так:
<?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.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>simple</short-name>
<uri>http://tomcat.apache.org/example-taglib</uri>
<description>A simple tab library for the examples</description>
<tag>
<name>printImageDirectory</name>
<tag-class>tag.ImageDirectoryTag</tag-class>
<attribute>
<name>dishId</name>
<required>true</required>
</attribute>
<attribute>
<name>imageFileName</name>
<required>true</required>
</attribute>
</tag>
</taglib>
Но вот проблема, когда я пытаюсь связать его с JSP вот так:
<%@ taglib uri="WEB-INF/tags/mytags.tld" prefix="m" %>
У меня вот эта ошибка
Unable to find taglib [m] for URI: [WEB-INF/tags/mytags.tld]
И ссылка не может быть resolved.
Я могу легко исправить это, добавив лишнюю / в начале, чтобы это выглядело так
<%@ taglib uri="/WEB-INF/tags/mytags.tld" prefix="m" %>
И все ошибки компиляции пропадают, но когда я теперь пытаюсь перейти на страницу - ловлю эту ошибку
org.apache.jasper.JasperException: Invalid tld file: [/WEB-INF/tags/mytags.tld], see JSP specification section 7.3.1 for more details
Что я делаю не так?
P.S. Это может быть нерелевантно, но вот сам тэг, который я использовал в tld.
public class ImageDirectoryTag extends TagSupport {
private int dishId;
private String imageFileName;
@Override
public int doStartTag() {
String dir = String.format("/%s/%s/%s", IMAGES_DIR, dishId, imageFileName);
JspWriter out = pageContext.getOut();
try {
out.print(dir);
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
public void setDishId(int dishId) {
this.dishId = dishId;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
}
Ответы (1 шт):
В спецификации указано, что в /WEB-INF/tags не могут находиться .tld файлы.
Более детально можно посмотреть в Java EE Tutorial.
Файлы дескрипторов библиотеки тегов имеют имена с расширением
.tld, а расширение указывает на файл дескриптора библиотеки тегов. При развертывании внутри файла JAR файлы дескрипторов библиотеки тегов должны находиться в каталогеMETA-INFили его подкаталоге. При развертывании непосредственно в веб-приложении файлы дескрипторов библиотеки тегов всегда должны находиться в каталогеWEB-INFили в каком-либо его подкаталоге. Файлы TLD не следует помещать в/WEB-INF/classesили/WEB-INF/lib, а также нельзя помещать в/WEB-INF/tagsили его подкаталог, если он не имеет имениimplicit.tldи не предназначен для настройки неявной библиотеки тегов с ее версией JSP и tlib-версией.
Переименуйте папку как-нибудь по другому, скажем tlds или перенесите файл tld в /WEB-INF/.