Ошибка при доступе к карте из Spring Controller в JSP с использованием JSTL - PullRequest
2 голосов
/ 01 сентября 2011

У меня есть контроллер пружины, в котором я возвращаю карту с именем "model";Модель содержит некоторый набор значений, но, что важно, также содержит ArrayList.Теперь я возвращаю эту Карту в мой JSP, используя JSTL в моем JSP для получения ошибки ArrayList. Она выдает ошибку.

<c:forEach items="${model.result}" var="data" varStatus="status"> <!-- result is my ArrayList -->
    <c:out value="${data.url}" /> <!-- here url is data inside my result arraylist -->
</c:forEach> 

Произошла ошибка:

root cause 

java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
    at javax.servlet.jsp.jstl.core.LoopTagSupport.unExposeVariables(LoopTagSupport.java:587)
    at javax.servlet.jsp.jstl.core.LoopTagSupport.doFinally(LoopTagSupport.java:323)
    at jsp_servlet._jsp.__searchsuccess._jsp__tag3(__searchsuccess.java:294)
    at jsp_servlet._jsp.__searchsuccess._jspService(__searchsuccess.java:137)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)

Этопрекрасно работает на сервере Tomcat, но когда я его разверну на сервере Weblogic (9.2), выдает ошибку.Мои записи пути к классам:

<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-fileupload-1.1.1.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-io-1.2.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-logging-1.1.1.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/hibernate-validator-4.0.2.GA.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/log4j-1.2.14.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/slf4j-api-1.5.6.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/slf4j-log4j12-1.5.6.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-asm-3.0.3.RELEASE.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-beans-3.0.3.RELEASE.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-context-3.0.3.RELEASE.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-core-3.0.3.RELEASE.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-expression-3.0.3.RELEASE.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-web-3.0.3.RELEASE.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-webmvc-3.0.3.RELEASE.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/validation-api-1.0.0.GA.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/log4j-1.2.9.jar"/>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/servlet-2.3.jar"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre6">
        <attributes>
            <attribute name="owner.project.facets" value="jst.java"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="WebContent/WEB-INF/lib/jstl-1.2.jar"/>
    <classpathentry kind="output" path="WebContent/WEB-INF/classes"/>

Обновление : я удалил jstl-1.2.jar и теперь получаю ошибку компиляции:

searchsuccess.jsp:1:5: No tag library could be found with this URI. Possible causes could be that the URI is incorrect, or that there were errors during pa
rsing of the .tld file.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    ^----^
searchsuccess.jsp:1:5: No tag library could be found with this URI. Possible causes could be that the URI is incorrect, or that there were errors during pa
rsing of the .tld file.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    ^----^

        at weblogic.servlet.jsp.JavelinxJSPStub.compilePage(JavelinxJSPStub.java:298)
        at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:200)
        at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:164)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:235)
        at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:394)

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

Согласно трассировке стека,

java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
    at javax.servlet.jsp.jstl.core.LoopTagSupport.unExposeVariables(LoopTagSupport.java:587)

тег JSTL <c:forEach> ожидает метод PageContext#getELContext(). Этот метод был введен в JSP 2.1. Таким образом, это исключение предполагает, что вы используете JSTL 1.2, в то время как ваш контейнер не поддерживает JSP 2.1, или что вы замусорили свой путь к классу выполнения во время работы с сервлет-контейнерами, специфичными для JSP-библиотек контейнера, который не поддерживает JSP 2.1. Путь к классам среды выполнения охватывает, помимо прочего, папку /WEB-INF/lib веб-приложения и папки JRE/lib и JRE/lib/ext Java.

Вы должны никогда помещать в эти папки специальные библиотеки для сервлетконтейнеров, такие как jsp-api.jar, servlet-api.jar, el-api.jar, j2ee.jar, javaee.jar и т. Д. И т. Д. Эти файлы который вы обычно видите в папке /lib самого сервлетконтейнера. Например. Tomcat/lib. Это делает ваше веб-приложение не переносимым на целевой контейнер сервлетов. Целевой контейнер сервлетов, в котором вы запускаете это веб-приложение, имеет эти библиотеки уже . Если вы сделали это, чтобы преодолеть ошибки компиляции в пакетах JSP / Servlet, то вам следовало бы решить это иначе. См. Также Как импортировать API javax.servlet в мой проект Eclipse?


Обновление : согласно вашему обновлению вы используете Weblogic 9.2, который является контейнером Servlet 2.4 / JSP 2.0. Он вообще не поддерживает JSP 2.1 / JSTL 1.2. Вам нужно удалить библиотеку JSTL 1.2. Если я не ошибаюсь, Weblogic уже поставляется с JSTL 1.1. В противном случае вам нужно включить его в classpath (папка /WEB-INF/lib) самостоятельно. Вы можете найти ссылку для скачивания JSTL 1.1 в нашей вики-странице JSTL .

0 голосов
/ 01 сентября 2011

У вас есть el-api.jar в вашем веб-приложении?

Пожалуйста, смотрите следующее сообщение:

http://www.coderanch.com/t/526731/JSP/java/java-lang-NoSuchMethodError-javax-servlet

-Kaj:)

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