2008-09-17 261 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,但不能解決上面突出顯示的問題。