2010-04-23 5 views
1

Я просто хотел бы дать JSF 2.0 (MyFaces 2.0) попробовать использовать Tomcat 6.0. Я совершенно не знаком с JSF. Я просто ставил статический xhtml как test.jsf в корне приложения. Когда запрос на URL, StackOverflowError всегда будет выброшено:бесконечный цикл/StackOverflowError при использовании Apache MyFaces 2.0

java.lang.StackOverflowError 
at org.apache.catalina.core.ApplicationHttpRequest$AttributeNamesEnumerator.<init>(ApplicationHttpRequest.java:904) 
at org.apache.catalina.core.ApplicationHttpRequest.getAttributeNames(ApplicationHttpRequest.java:243) 
at org.apache.catalina.core.ApplicationHttpRequest$AttributeNamesEnumerator.<init>(ApplicationHttpRequest.java:905) 
at org.apache.catalina.core.ApplicationHttpRequest.getAttributeNames(ApplicationHttpRequest.java:243) 
at org.apache.catalina.core.ApplicationHttpRequest$AttributeNamesEnumerator.<init>(ApplicationHttpRequest.java:905) 

(повторенные много раз, но потом :)

at org.apache.catalina.core.ApplicationHttpRequest$AttributeNamesEnumerator.<init>(ApplicationHttpRequest.java:905) 
at org.apache.catalina.core.ApplicationHttpRequest.getAttributeNames(ApplicationHttpRequest.java:243) 
at org.apache.myfaces.context.servlet.RequestMap.getAttributeNames(RequestMap.java:66) 
at org.apache.myfaces.util.AbstractAttributeMap.isEmpty(AbstractAttributeMap.java:100) 
at org.apache.myfaces.renderkit.ErrorPageWriter._writeVariables(ErrorPageWriter.java:558) 
at org.apache.myfaces.renderkit.ErrorPageWriter._writeVariables(ErrorPageWriter.java:538) 
at org.apache.myfaces.renderkit.ErrorPageWriter.debugHtml(ErrorPageWriter.java:259) 
at org.apache.myfaces.renderkit.ErrorPageWriter.debugHtml(ErrorPageWriter.java:221) 
at org.apache.myfaces.renderkit.ErrorPageWriter.handleThrowable(ErrorPageWriter.java:384) 
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:102) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) 
at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:439) 
at org.apache.myfaces.view.jsp.JspViewDeclarationLanguage.buildView(JspViewDeclarationLanguage.java:115) 
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:103) 
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:207) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) 
at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:439) 
at org.apache.myfaces.view.jsp.JspViewDeclarationLanguage.buildView(JspViewDeclarationLanguage.java:115) 
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:103) 
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:207) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191) 

(также повторяется много раз ...)

Что Я сделал не так?

ответ

3

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

+0

спасибо, используя .xhtml вместо .jsf работал. Почему это называется рекурсивным, когда его суффикс .jsf btw? – MRalwasser

+0

Потому что * actual * filename будет соответствовать «URL-pattern». 'FacesServlet', а именно, внутренне перенаправляет запрос к фактическому файлу, который, в свою очередь, может вызывать другие сервлеты/фильтры, прослушивающие соответствующий URL. В этом конкретном случае снова будет вызываться 'FacesServlet' ... бесконечный цикл! – BalusC

Смежные вопросы