IntelliJ и JSP/JSTL не могут разрешить taglib для JSTL в tomcat7

Прежде всего мой код JSTl работает на моем сервере, потому что у меня есть правильный файл Jar в папке Lib в tomcat7. Это действительно проблема ИДЕИ. Мои вопросы сводятся к тому, где я положил тот же файл JAR в моем каталоге файлов в IntelliJ.

Я столкнулся с ошибкой в IntelliJ и JSTL.

Моя проблема в том, что когда я использую

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

Это приводит к невозможности разрешения taglib с помощью uri. Я пробовал разные файлы Jar и знаю, что мне нужно исправить версию для моего сервлета.

Я запускаю tomcat7 на Ubuntu Server 15.04 и IntelliJ 14.1.3.

Я попытался импортировать файл JAR через структуру проекта, и включить его в разных местах, но все еще с той же ошибкой после перестройки проекта, закрытия и повторного открытия IDEA.

Этот пример кода запускается при развертывании на tomcat, но IntelliJ продолжает выдавать ошибки.

<table border="1">
    <c:forEach var="a" items="${data}">
        <tr>
            <td>${a}</td>
        </tr>
    </c:forEach>
</table>

<c:forEach begin="0" end="255" var="i">
    <span style='color:rgb(
        <c:out value="${i}"/>,
        <c:out value="${i}"/>,
        <c:out value="${i}"/>);'>
        <c:out value="${i}"/></span> <br />
</c:forEach>

Я хотел бы знать, как не дать IntelliJ выдавать ошибки в моем синтаксисе, даже если код работает.

Я прочитал JSTL в IntelliJ дает ошибки в JSP

а также

https://www.jetbrains.com/idea/features/jsp_editor.html

Все еще не повезло.

Ответ 1

Сначала добавьте это в начало вашего файла .jsp:

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

Он по-прежнему будет давать синтаксическую ошибку, но вы можете исправить это, добавив "javax.servlet: jstl: 1.2" (без кавычек) в качестве зависимости от модуля. Для этого выполните следующие действия:

  • Нажмите название проекта и нажмите "F4" , чтобы открыть диалог настроек модуля.
  • Затем перейдите на вкладку "зависимости" в разделе "modules".
  • Нажмите зеленый значок "+" → библиотека → От Maven.
  • Найдите javax.servlet:jstl:1.2 в строке поиска и нажмите OK, и он загрузит и добавит вышеупомянутую библиотеку в качестве модуля.
  • Теперь у вас не должно быть какой-либо синтаксической ошибки.

Ответ 2

Если вы используете maven, добавьте следующий код в pom.xml внутри <dependencies></dependencies>

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

Ответ 3

Если вы по-прежнему получаете ошибки после выполнения инструкций, предоставленных пользовательским интерфейсом Shams Azeem, вам может понадобиться добавить библиотеку JSTL к артефакту WAR Exploded. Сделать это:

  1. Перейти к структуре проекта. В разделе "Параметры проекта" выберите "Артефакты". В нижней части окна меню может появиться сообщение о том, что используемая библиотека JSTL не включена в WAR.

2а. Сообщение видно. Если сообщение отображается, рядом с ним должна быть кнопка "Исправить". Нажмите эту кнопку Fix. Выберите "добавить javax.servlet:jstl:1.2 к артефакту".

2b. Сообщение не видно Если сообщение не отображается, посмотрите выше, чтобы увидеть, находится ли javax.servet:jstl:1.2 (Project Library) под столбцом Доступные элементы. Если это так, щелкните правой кнопкой мыши и выберите "Поместить в /WEB-INF/lib".

Если вы работаете с Maven, сообщение об исправлении не появится, хотя вам все равно потребуется это сделать.

Ответ 4

В моем случае добавление зависимости javax.servlet:jstl:1.2 не сработало.

Добавлена зависимость jstl:jstl:1.2.