Подтвердить что ты не робот

JLTL taglib не распознаются при объявлении в общем заголовке

У меня появилась идея вернуться назад, чтобы поместить все мои объявления taglib (uri's и т.д.) в общий заголовочный файл, поэтому мне не нужно вручную записывать их во все мои JSP. Первоначально все казалось прекрасным, хотя я не использую теги taglib, а не просто простой синтаксис EL. Тем не менее, у меня возникают проблемы во всех файлах jsp, кроме тех, которые явно объявлены taglib. Все остальные jsp (включая заголовочный файл) обрабатывают тег <c:something.../> так, как если бы он был HTML и не оценивал его. Я сделал несколько поисковых запросов и нашел

Включение:

<jsp:include page="/WEB-INF/jsp/include/header.jsp">
    <jsp:param name="title" value="Home" />
</jsp:include>
4b9b3361

Ответ 1

Это ожидаемое поведение.

Когда вы используете <jsp:include>, он выполняет цель в отдельном запросе, а затем включает вывод в включенном JSP. Он не включает источник включенной цели, он включает в себя выход. Средства, с помощью которых генерируется этот целевой результат, теряются.

Чтобы сделать то, что вы пытаетесь сделать, вам нужно использовать директивы <% include %>:

<%@ include file="/WEB-INF/jsp/include/header.jsp" %>

Это наложит литеральный текст header.jsp на вашу страницу. Конечно, при этом вы больше не можете передавать ему параметры, поэтому вам нужно установить это как атрибут контекста страницы (например, используя <c:set>... но, конечно, вы не можете использовать <c:set> до тех пор, пока вы сделали свое включение...).

По сути, это действительно не стоит хлопот. Декларации Taglib являются раздражающим шаблоном, но трудно избавиться.