У меня есть приложение 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/syntaxes и т. д.
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 относится к этим jar-файлам 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. Я был бы переполнен благодарностью, если бы кто-нибудь видел это раньше.
отметка