2010-03-05 4 views
1

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

Мой файл 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 ...

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

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-личинки заставляет 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> 

поэтому я озадачен о том, как я могу обойти эту ошибку. Похоже, это будет простое исправление, но поскольку я использую последние банки, которые должны быть совместимы с 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) 

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

Марк

ответ

6
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 tutorial part II chapter 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 books/tutorials/documentation, как правильно настроить его.

+0

BalusC, см. Мое обновление вопроса. Спасибо за вашу помощь в этом. – volvox

+1

Ключевыми словами в этом ответе являются «консультации», «документация», «настройка» и «правильная». Спасибо, BalusC за пощечину. – volvox

0

Добавить JSF осущ банки в Lib Tomcat или ваше приложение Lib и повторите попытку.
См. this для получения дополнительной информации.

+0

Tomcat не поставляется с любым имплантатом JSF (если, конечно, OP не обязательно их там положить). – BalusC

+0

Спасибо за указание. Я в основном работаю с GlassFish и JBoss. – Padmarag