Теги JSTL не распознаются при объявлении в общем заголовке - PullRequest
10 голосов
/ 01 декабря 2010

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

Заголовочный файл:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ page session="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

Заявление о включении:

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

1 Ответ

21 голосов
/ 01 декабря 2010

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...