2008-09-17 92 views
6

好吧,自从我加入这个网站后,我已经运行了我的第一个StackOverflowError,我想这是一个必须发布:-)。我的环境是Seam 2.0.1.GA,JBoss 4.2.2.GA,我正在使用JSF。我正在从facelets视图转换为JSP,以利用现有网站上使用的一些现有JSP标记。我尝试渲染jsp页面时,更改了faces-config.xml和web.xml配置文件并开始接收以下错误。任何人有任何想法?Faces Servlet抛出异常java.lang.StackOverflowError

2008-09-17 09:45:17537 DEBUG [org.jboss.seam.contexts.FacesLifecycle] 开始JSF请求/form_home.jsp 2008-09-17 09:45:17587 ERROR [org.apache.catalina.core.ContainerBase。[jboss.web]。[localhost]。[/]。[Faces Servlet]] Servlet.service()for servlet Faces Servlet抛出异常 java.lang.StackOverflowError at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:210) at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:222) 在org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:222) 在org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:222) ...

我faces-config.xml文件现在是空的,没有FaceletsViewHandler:

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xi="http://www.w3.org/2001/XInclude" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> 

</faces-config> 

我的web.xml文件:

<?xml version="1.0"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
<!-- Ajax4jsf --> 
<context-param> 
    <param-name>org.richfaces.SKIN</param-name> 
    <param-value>blueSky</param-value> 
</context-param> 
    <!-- Seam --> 
<listener> 
    <listener-class>org.jboss.seam.servlet.SeamListener</listener-class> 
</listener> 


<filter> 
    <filter-name>Seam Filter</filter-name> 
    <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>Seam Filter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
</filter-mapping> 

<servlet> 
    <servlet-name>Seam Resource Servlet</servlet-name> 
    <servlet-class>org.jboss.seam.servlet.SeamResourceServlet 
    </servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Seam Resource Servlet</servlet-name> 
    <url-pattern>/seam/resource/*</url-pattern> 
</servlet-mapping> 
<!-- Seam end --> 

<!-- JSF --> 
<context-param> 
     <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
     <param-value>.jsp</param-value> 
</context-param> 

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsp</url-pattern> 
</servlet-mapping> 
+0

您可能希望使开头语句更清楚。第一印象是这是网站本身的堆栈溢出错误。 ;) 不是每个人都知道java。 – 2008-09-17 17:21:10

+0

我有一个同事得到相同的错误(代码适用于我),但模式应该是正确的(.xhtml与* .seam) - 是在这种情况下重要的Seam过滤器映射? – larsivi 2008-09-24 12:23:57

回答

9

我能弄清楚这个问题。显然,您不能将web.xml配置为具有与Faces Servlet url模式(* .jsp)相同的Javax.faces.DEFAULT_SUFFIX的.jsp参数值。如果您将网址格式更改为.jspx或更改为/ whateverdirnameyouwant/,则应用程序启动时不会发生堆栈溢出错误。 (注意:关键在于DEFAULT_SUFFIX和Faces Servlet url模式无论如何都不能相同)。希望这可以帮助任何遇到这个特定问题的人。

2

堆栈溢出在Java几乎总是由无限的递归/方法调用引起的。在给出堆栈跟踪的情况下,看起来'getAttribute()'被重复调用直到崩溃。虽然我并不熟悉您使用的特定环境,但我建议您检查您的.jsp代码是否存在这种类型的行为(例如,两种方法可以相互调用)

0

所以,我有一个类似的错误。对我来说,这是我有一个JSF项目,我正在搞文件扩展名。首先,我的所有网页文件的扩展名为.jsp。这是行得通的,但是我希望它们都是.jsf,然后我全部使用.xhtml。在这个过程中,我的web.xml文件改变为适应xhtml和jsf。更改web.xml文件很好。是什么让我的StackOverflowError是我有一个指向header.jsf的ui.include标签的index.xhtml。所以我有一个xhtml文件指向一个jsf文件。我曾经认为web.xml能够处理这个,但它没有,我得到了StackOverflowError。所以,为了解决这个问题,现在我所有的JSF文件都有扩展名.xhtml,嵌套的ui:include标签指向.xhtml文件。

另一方面,浏览器url可以处理index.jsp,index.jsf,index.xhtml就好了。所以web.xml(使用jsp,jsf和xhtml的servlet映射)可以很好地处理浏览器URL,但不能解决上面突出显示的问题。