Проблема компиляции JSP со встроенным причалом при использовании атрибута tagdir - PullRequest
0 голосов
/ 31 августа 2011

Я пытаюсь проверить теги JSP, которые определены как файлы .tag в каталоге WebContent моего приложения.Структура веб-проекта выглядит следующим образом:

  • Проект
  • Веб-контент
    • WEB-INF
      • теги
        • tag1.tag
      • просмотров
        • tagTest.jsp

Использование автономногоПристань, я пытаюсь загрузить тест JSP.tagTest.jsp является просто оболочкой над файлом тегов и вызывает его с помощью атрибута tagdir, например:

<%@ taglib prefix="test" tagdir="/WEB-INF/tags" %>
<test:tag1 model="${cat}" />

Я настроил сервер следующим образом:

WebAppContext webCtx = new WebAppContext();
webCtx.setContextPath("/jsptest");
webCtx.setDescriptor("WebContent/WEB-INF/test-web.xml");

webCtx.setResourceBase("WebContent");

ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.setHandlers(new Handler[] { webCtx });
server.setHandler(contexts);

Я настроил сервлетэто перенаправляет запрос на тестирование jsp, так как я не смог вызвать jsp из подкаталога WebContent напрямую:

    request.setAttribute("cat", new SomeModel());
    getServletContext().getRequestDispatcher("/WEB-INF/views/tagTest.jsp").forward(request, response);

При вызове этого сервлета выдается следующая ошибка (также та же ошибка, если я копирую test jsp непосредственно в WebContent и вызываюas /jsptest/tagTest.jsp)

org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:634)
at org.apache.jasper.servlet.JspServletWrapper.loadTagFile(JspServletWrapper.java:280)
at org.apache.jasper.compiler.TagFileProcessor.loadTagFile(TagFileProcessor.java:660)
at org.apache.jasper.compiler.TagFileProcessor.access$000(TagFileProcessor.java:91)
at   org.apache.jasper.compiler.TagFileProcessor$TagFileLoaderVisitor.visit(TagFileProcessor.java:719)
...

Caused by: java.lang.NullPointerException
at org.apache.taglibs.standard.tlv.JstlBaseTLV.validate(JstlBaseTLV.java:149)
at org.apache.taglibs.standard.tlv.JstlCoreTLV.validate(JstlCoreTLV.java:105)
at org.apache.jasper.compiler.TagLibraryInfoImpl.validate(TagLibraryInfoImpl.java:949)
at org.apache.jasper.compiler.Validator.validateXmlView(Validator.java:1921)
at org.apache.jasper.compiler.Validator.validate(Validator.java:1888)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:223)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)

Как настроить JSP со встроенным Jetty, имеющим теги tagdir?Нужно ли вести войну, если используются тагдиры?Обычный jsp загружается нормально, тег uri обрабатывается правильно:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> - this works

Ответы [ 2 ]

0 голосов
/ 20 сентября 2013

В зависимости от используемой версии причала может потребоваться включить сканирование TLD.

Я использую Jetty 7, и я включил его, установив атрибут в контексте, в котором я хочу использовать теги libs:

webCtx.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", 
    ".*/.*jsp-api-[^/]*\\.jar$|.*/.*jsp-[^/]*\\.jar$|.*/.*taglibs[^/]*\\.jar$");

См. http://wiki.eclipse.org/Jetty/Howto/Configure_JSP#Using_JSTL_Taglibs_for_Jetty_7.x_and_8.x

В моем проекте (с использованием maven) у меня есть стандартные TLD в JAR "org.apache.taglibs.standard.glassfish-1.2.0.v2011120803.jar", и теоретически этого будет достаточно для использования в качестве значения для ContainerIncludeJarPattern следующий шаблон:

".*/org\\.apache\\.taglibs\\.standard\\.glassfish-1\\.2\\.0\\.v201112081803\\.jar"

На самом деле это работает, и это подтверждение того, где Jetty нашел теги libs, но я предпочел оставить предыдущий шаблон, который я нашел на странице wiki.eclipse.org, указанной выше.

Может потребоваться расширить шаблон, если вы хотите включить пользовательские теги libs.

0 голосов
/ 31 августа 2011

Правильное объявление основной библиотеки тегов JSTL -

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

Попробуйте с этим и посмотрите, решит ли это проблему.

...