#jsp #jsp-tags #taglib #tag-library-descriptor
Вопрос:
Я создаю пользовательский taglib под SpringBoot. Мой тег taglib-это:
<%@taglib prefix="ttl" uri="/WEB-INF/tags/resourceBundle.tld" %>
Я создал файл TLD в соответствии со многими доступными источниками и поместил его в /WEB-INF/теги/ResourceBundle.tld, вот часть с тегом uri
<taglib>
<uri>/WEB-INF/tags/resourceBundle.tld</uri>
...
но я получаю это сообщение об ошибке, когда ссылаюсь на библиотеку тегов:
org.apache.jasper.JasperException: Invalid tld file: [/WEB-INF/tags/resourceBundle.tld], see JSP specification section 7.3.1 for more details
тем не менее, я не верю, что он когда-либо будет прочитан, поскольку он признан недействительным в TagLibraryInfoImpl::generateTldResourcePath()@281:
if (uri.endsWith(".jar")) {
// snip
} else if (uri.startsWith("/WEB-INF/lib/") || uri.startsWith("/WEB-INF/classes/") ||
(uri.startsWith("/WEB-INF/tags/") amp;amp; uri.endsWith(".tld")amp;amp; !uri.endsWith("implicit.tld"))) {
err.jspError("jsp.error.tld.invalid_tld_file", uri);
}
Код заканчивается в последней строке err.jspError:
err.jspError("jsp.error.tld.invalid_tld_file", uri);
В принципе, если URI начинается с «/WEB-INF/теги» (как говорят многие источники, является обязательным) и заканчивается «.tld», но не «неявный.tld», то файл tld является «недопустимым» — этот вывод делается даже без открытия файла.
Я изменил uri <%@taglib%>, чтобы ссылаться на несуществующий файл, и получаю то же сообщение об ошибке по тому же пути через код (выше).
Я прочитал множество статей на эту тему и рассмотрел старый проект, в котором я использовал пользовательский taglib (но в нем использовались ANT и Spring, я использую Maven и SpringBoot), я не могу понять, как распознать мою библиотеку тегов.
Может кто-нибудь сказать мне, что я делаю не так?
Ответ №1:
В спецификации JSP 2.1 говорится, что:
Файлы TLD не должны размещаться в /WEB-INF/классах или /WEB-INF/lib и не должны размещаться внутри /WEB-INF/тегов или его подкаталога, если только он не назван неявным.tld.
Я предлагаю использовать другой каталог.
Комментарии:
1. Очевидно, я не игрок в гольф… Клянусь, я читал в чьем-то блоге, что они ДОЛЖНЫ быть в тегах/…
2. Подтверждаю, спасибо. Теперь я буду просматривать историю своего браузера и находить странствующие блоги. Было бы полезно, если бы сообщение было «invalid_tld_filepath», а не просто «invalid_tld_file».