как решить эту проблему jstl-тега в моем проекте-источнике в intellij IDEA [duplicate]

Я бы использовал это:

select t.*
from test as t
join
   (select max(rev) as rev
    from test
    group by id) as o
on o.rev = t.rev

Подзапрос SELECT не слишком эффективен, но в предложении JOIN кажется полезным. Я не эксперт в оптимизации запросов, но я пробовал в MySQL, PostgreSQL, FireBird, и он работает очень хорошо.

Вы можете использовать эту схему в нескольких соединениях и с предложением WHERE. Это мой рабочий пример (решение идентично вашей задаче с таблицей «твердое»):

select *
from platnosci as p
join firmy as f
on p.id_rel_firmy = f.id_rel
join (select max(id_obj) as id_obj
      from firmy
      group by id_rel) as o
on o.id_obj = f.id_obj and p.od > '2014-03-01'

Его спрашивают на таблицах с подростками таких записей записей, и он занимает менее 0,01 секунды на самом деле не слишком сильная машина.

Я бы не использовал пункт IN (как упоминается выше). IN предоставляется для использования с короткими списками констант, а не как фильтр запросов, построенный на подзапросе. Это связано с тем, что подзапрос в IN выполняется для каждой отсканированной записи, которая может сделать запрос очень медленным.

104
задан BalusC 13 July 2015 в 06:06
поделиться

12 ответов

org.apache.jasper.JasperException: Абсолютный uri: http://java.sun.com/jstl/core не может быть разрешен в файле web.xml или jar развернутый с этим приложением

Этот URI для JSTL 1.0, но вы на самом деле используете JSTL 1.2, который использует URI с дополнительным /jsp путем (поскольку JSTL, который изобрел EL-выражения, поскольку версия 1.1 интегрирована как часть JSP для совместного использования / повторного использования EL-логики в простом JSP).

Итак, исправьте URI taglib соответственно:

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

Дальше POM также определяет реализацию Apache JSTL 1.1 через taglibs:standard. Это необязательно и даже опасно, если у вас уже есть JSTL 1.2 API + impl, связанный через javax.servlet:jstl , потому что 1.1 и 1.2, очевидно, конфликтуют друг с другом. Только одна из следующих зависимостей JSTL 1.2 должна сделать это, чтобы JSTL был установлен в вашем веб-приложении, ориентированном на Tomcat (не устанавливайте <scope> на provided, поскольку Tomcat на самом деле не предоставляет его в поле!):

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

Пользователи, не являющиеся членами Maven, могут добиться того же, отбросив единственный файл jstl-1.2.jar в папке /WEB-INF/lib проекта веб-приложения (не отбрасывайте standard.jar или любые свободные .tld-файлы там!).

Если вы на самом деле используете обычный Java EE-сервер, такой как WildFly, Payara и т. д. вместо barebones servletcontainer, таких как Tomcat, Jetty и т. д. то вам не нужно явно устанавливать JSTL. Обычные серверы Java EE уже предоставляют JSTL из коробки. Другими словами, вам не нужно добавлять JSTL в pom.xml и не удалять файлы JAR / TLD в webapp. Исключительно достаточно provided координаты Java EE:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version><!-- 8.0, 7.0, etc depending on your server --></version>
    <scope>provided</scope>
</dependency>

Далее вы также должны убедиться, что ваш web.xml объявлен как совместимый не менее Servlet 2.4 и, следовательно, не как Сервл 2.3 или старше. В противном случае EL-выражения внутри тегов JSTL, в свою очередь, не сработают. Выберите самую высокую версию, соответствующую вашему целевому контейнеру, и убедитесь, что у вас нет <!DOCTYPE> в любом месте вашего web.xml. Вот пример совместимости с сервлетами 4.0 (Tomcat 9):

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">

    <!-- Config here. -->

</web-app>

См. Также:

150
ответ дан BalusC 3 September 2018 в 13:05
поделиться
  1. Загрузить jstl-1.2.jar
  2. Добавить эту директиву на свою страницу: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. Вставить JAR-файл в свою WEB -INF / lib. Это должно сработать. (Это сработало для меня.)
7
ответ дан Community 3 September 2018 в 13:05
поделиться

Все ответы в этом вопросе помогли мне, но я подумал, что добавлю дополнительную информацию для потомков.

Оказалось, что у меня была тестовая зависимость от gwt-test-utils, которая привела к gwt-dev. К сожалению, gwt-dev содержит полную копию Jetty, JSP, JSTL и т. Д., Которая была впереди соответствующих пакетов на пути к классам. Поэтому, несмотря на то, что у меня были соответствующие зависимости от JSTL 1.2, он загружал версию версии 1.0 на gwt-dev. Grumble.

Решение для меня состояло в том, чтобы не запускаться с областью тестирования, поэтому я не собираю пакет gwt-test-utils во время выполнения. Удаление пакета gwt-dev из пути к классам каким-либо другим способом также устранило бы проблему.

13
ответ дан Gray 3 September 2018 в 13:05
поделиться

Добавьте jstl-1.2.jar в папку tomcat/lib.

При этом ваша ошибка зависимостей будет исправлена ​​снова.

5
ответ дан Hadi Rasouli 3 September 2018 в 13:05
поделиться

Устранена аналогичная проблема в IBM RAD 7.5, выбрав:

  1. Свойства проектов
  2. Границы проекта
  3. Флажок JSTL
-2
ответ дан hrbrmstr 3 September 2018 в 13:05
поделиться

Я уже упоминал, что зависимость Maven в pom.xml неверна. Это должно быть

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
3
ответ дан LoBo 3 September 2018 в 13:05
поделиться

Я просто хотел добавить исправление, которое я нашел для этой проблемы. Я не уверен, почему это сработало. У меня была правильная версия jstl (1.2), а также правильная версия servlet-api (2.5)

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

У меня также был правильный адрес на моей странице, как предлагается в этом потоке, который является

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

Что исправлено для меня, это удаление тега области из моего xml-файла в pom для моей зависимости jstl 1.2. Снова не уверен, почему это исправлено, но на тот случай, если кто-то делает весну с учебником JPA и Hibernate по множественности и имеет свою настройку pom таким образом, попробуйте удалить тег области и посмотреть, исправляет ли он это. Как я сказал, это сработало для меня.

2
ответ дан Meyer 3 September 2018 в 13:05
поделиться

Если вы все пробовали, но это не помогло, вы должны перезапустить сервер. В моем случае я просто забыл перезапустить Tomcat после добавления javax.servlet.jsp.jstl-1.2.1.jar в lib.

0
ответ дан Mike Yakovets 3 September 2018 в 13:05
поделиться

Я нашел еще одну причину такого типа ошибок: в моем случае кто-то установил свойство catalina.properties tomcat.util.scan.StandardJarScanFilter.jarsToSkip на *, чтобы избежать сообщений о предупреждении журнала, тем самым пропустив необходимое сканирование Tomcat. Изменение этой функции на Tomcat по умолчанию и добавление соответствующего списка банок для пропуска (не включая jstl-1.2 или spring-webmvc) решили проблему.

5
ответ дан resnbl 3 September 2018 в 13:05
поделиться

Я полностью отключил MAVEN и Spring. И мне пришлось добавить следующие банки для правильной работы моей среды.

  • spring-aop-4.0.3.RELEASE.jar
  • spring-beans-4.0.3 .RELEASE.jar (трудно найти это исправление, другие org.springframework & lt; 3.versions> просто не работают.
  • spring-context-4.0.3.RELEASE.jar
  • spring-core-4.0.3.RELEASE.jar
  • spring-expression-4.0.3.RELEASE.jar
  • spring-web-4.0.3.RELEASE.jar
  • spring-webmvc-4.0.3.RELEASE.jar
  • jstl-1.2.jar

Хуже всего было jstl-api-1.2.jar и javax-servlet.jsp.jst-api-1.2.1.jar Они просто не работали.

`jstl-1.2.jar работал хорошо.

2
ответ дан Siddharth 3 September 2018 в 13:05
поделиться

@BalusC совершенно прав, но если вы все еще сталкиваетесь с этим исключением, это означает, что вы сделали неправильно. Самая важная информация, которую вы найдете, находится на странице SO JSTL Tag Info .

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

  1. Проверьте версию сервлета в web.xml: <web-app version="2.5">
  2. Проверьте, поддерживается ли версия JSTL для этой версии сервлета: версия сервлета 2.5 использует JSTL 1.2 или сервлет версии 2.4 использует JSTL 1.1
  3. В вашем контейнере сервлетов должна быть соответствующая библиотека, или вы должны включить ее вручную в ваше приложение. Например: JSTL 1.2 требует jstl-1.2.jar

Что делать с Tomcat 5 или 6:

Вам нужно включить соответствующие баннеры в ваш веб-сайт -INF / lib (он будет работать только для вашего приложения) или в tomcat / lib (будет работать глобально для всех приложений).

Последнее, что taglib в ваших jsp-файлах. Для JSTL 1.2 правильным является следующее:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
32
ответ дан Stephen P 3 September 2018 в 13:05
поделиться

Просто была аналогичная проблема в Eclipse, исправленная с помощью:

rightclick on project->Properties->Deployment Assembly->add Maven Dependencies

, что-то вытолкнуло это раньше, пока я редактировал мой pom.xml

У меня были все необходимые файлы jar, taglib uri и web.xml были в порядке

0
ответ дан w3Charlie 3 September 2018 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: