В JSP необходимо ли повторно объявлять библиотеки тегов во включенных файлах?

StackOverflow https://stackoverflow.com/questions/1683109

  •  18-09-2019
  •  | 
  •  

Вопрос

Я не очень знаком с тем, как это работает в JSP

но в

шаблон main.jsp есть такой:

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
<jsp:include page="/jsp/common_head.jsp"/>

затем в common_head.jsp мы снова получаем это:

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>

необходимо ли это?

или другими словами

Распространяются ли объявления taglib для включения файлов?

Это было полезно?

Решение

Да, это необходимо.Перед первым запуском каждый файл JSP будет индивидуально преобразован / переведен / скомпилирован в автономный Servlet класс.Все теги будут переведены в "реальный" Java-код / методы.Если вы не объявляете taglib, то компилятор JSP не знает, какой Java-код / методы ему нужно сгенерировать / вызвать для конкретных тегов.

В случае, например, Tomcat, загляните в /work папка для всех этих скомпилированных JSP.Посмотрите на их источник, и все станет ясно.

Другие советы

В

<jsp:include page="/jsp/common_head.jsp"/>

...тег является динамическим включаемым, что означает, что он динамически вызывает страницу common_head.jsp, которая компилируется независимо от включающей страницы.Таким образом, директива taglib должна быть необходима.

Если, с другой стороны, вы должны были выполнить статическое включение, используя include директива

<%@ include file="/jsp/common_head.jsp" %>

...файл был бы скопировано-вставлено и и скомпилирован со страницы, с которой он включен.Тогда директива taglib не должна быть нужна.

В любом случае вы можете захотеть включить taglib просто для того, чтобы получить поддержку редактора тегов, которые вы используете во время разработки.

Обратите внимание, что статические файлы включаются статически, даже с тегом jsp:include

включить директиву: http://java.sun.com/products/jsp/syntax/1.2/syntaxref129.html#997991

jsp включает в себя: http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

Поскольку вы включаете динамический ресурс, этот ресурс является "автономным", поэтому он должен включать любую библиотеку тегов, которую вы используете.Другой вопрос, используете ли вы эти теги...

Да , это требуется для компиляции JSP .Вы также можете использовать приведенный ниже taglib вместо c.tld.

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

надеюсь, это поможет

В других системах шаблонов определения обычно переносятся.Я не понимаю, почему вы должны использовать его снова

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top