Проблема с настройкой имени файла в Tomcat 6 JSF / JSP - PullRequest
1 голос
/ 05 марта 2010

У меня есть приложение JSF, развертываемое из Eclipse Ganymede через Tomcat 6. Последний предлагает JSP 2.0. Я использую реализацию Sun RI JSF и RichFaces 3.3.2SR1.

Мой файл index.jsp по запросу из браузера вызывает эту ошибку для консоли:

05-Mar-2010 12:04:41 org.apache.catalina.core.ApplicationDispatcher invoke SEVERE: Servlet.service() for servlet jsp threw exception org.apache.jasper.JasperException: /index.jsp(35,41) #{..} is not allowed in template text ...

ОК, я видел другие посты на эту тему, включая несовместимости версий различных jar / taglibs / синтаксисов и т. Д.

index.jsp вызывается с использованием http://localhost:8989/myapp/index.jsf (или .jsp - выдает ту же ошибку) и содержит

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">

, который должен быть в порядке, поскольку facelets есть в Mojarra 2.0.2FCS, который я использую. Я, кажется, должен использовать приведенный выше синтаксис, а не например. <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> поскольку URI-адрес facelets заставляет Eclipse сказать Cannot find the tag library descriptor for "http://java.sun.com/jsf/facelets".

Моя проблема связана с тем, как я перечисляю эти теги?

Мой файл сборки Ant ссылается на следующие файлы Tomcat:

    <fileset dir="${cliTomcatlib}">
        <include name="servlet-api.jar" />
        <include name="jsp-api.jar" />
    </fileset>

поэтому я озадачен тем, как обойти эту ошибку. Такое ощущение, что это было бы простым исправлением, но, поскольку я использую последние jar-файлы, которые должны быть совместимы с JSP 2.0, мне интересно, почему я получаю эту ошибку. JSF

EDIT В ответ на мудрость BalusC я исправил две ссылки на внешние jsp-файлы и переименовал все .jsp в .xhtml. Я также вспомнил, чтобы обновить мой faces-config.xml.

Повторное развертывание ошибок с большой и повторяющейся ошибкой, когда index.xhtml запрашивается следующим образом:

05-Mar-2010 13:29:26 org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.StackOverflowError
    at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:824)
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
    at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:544)
...
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
    at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:544)
    at com.sun.faces.context.ExternalContextImpl.getSession(ExternalContextImpl.java:151)
    at javax.faces.application.ViewHandler.calculateCharacterEncoding(ViewHandler.java:242)
    at javax.faces.application.ViewHandler.initView(ViewHandler.java:458)
    at com.sun.faces.application.view.MultiViewHandler.initView(MultiViewHandler.java:106)
    at org.ajax4jsf.application.ViewHandlerWrapper.initView(ViewHandlerWrapper.java:128)
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:109)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)

, который, как я признаю, не очень яркий, за исключением того, что первые несколько строк трассировки стека повторяются так много раз, что мне приходилось менять консольный буфер в Eclipse. Я был бы переполнен благодарностью, если бы кто-нибудь видел это раньше.

Mark

Ответы [ 2 ]

6 голосов
/ 05 марта 2010
org.apache.jasper.JasperException: /index.jsp(35,41) #{..} is not allowed in template text 

Unified EL действительно не допускается в тексте шаблона в JSP.Это разрешено только в Facelets.

index.jsp вызывается с использованием http://localhost:8989/myapp/index.jsf (или .jsp - выдает ту же ошибку) и содержит

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
     xmlns:ui="http://java.sun.com/jsf/facelets"

Вы смешиваете JSP с Facelets.Вы можете и не должны к этому.Это две разные технологии просмотра.Используйте тот или другой.JSP предназначен для <%@taglib %>, а Facelets ориентирован на XHTML с <html xmlns> и <ui:xxx>.Для JSF 2.0 вы должны использовать Facelets.Переименуйте все файлы с *.jsp на *.xhtml, замените и избавьтесь от любых вещей <% %> и <jsp:xxx>.

Чтобы узнать больше о Facelets, начните здесь с учебника по Java EE 6часть II глава 5 .Если вы хотите вернуться к древнему JSP вместо Facelets для JSF 2.0, то вам нужно перенастроить обработчик представления в JSF.

Помимо от проблемы, TomcatКстати, 6.0 - это JSP 2.1, а не JSP 2.0.

Обновление: StackOverflowError на getSession() указывает на бесконечную рекурсию в отображениях сервлета / фильтра.Как ваш FacesServlet отображается?Это должно быть сопоставлено для прослушивания url-pattern из *.jsf, а не *.xhtml.В противном случае он будет называть себя рекурсивно.Пожалуйста, обратитесь / обратитесь к JSF 2.0 книги / учебники / документация , чтобы узнать, как правильно его настроить.

0 голосов
/ 05 марта 2010

Добавьте JSF impl jar в библиотеку Tomcat или в приложение и попробуйте снова.
Подробнее см. .

...