好吧,自从加入这个网站以来,我遇到了我的第一个 StackOverflowError,我认为这是必须发布的:-)。我的环境是Seam 2.0.1.GA,JBoss 4.2.2.GA,我正在使用JSF。我正在从 Facelets 视图转换为 JSP,以利用我们现有站点上使用的一些现有 JSP 标记。我更改了 faces-config.xml 和 web.xml 配置文件,并在尝试呈现 jsp 页面时开始收到以下错误。有人有什么想法吗?

2008-09-17 09:45:17,537调试[org.jboss.seam.contexts.faceslifecycle]开始JSF请求 /form_home.jsp 2008-09-17 09:45:17,587错误[org.apache.catalina.core.cate.catalina.core。 [jboss.web]。[localhost]。[/]。[faces servlet]] Servlet.service()Servlet for for Servlet Servlet在org.core.core.core.core.core.core.applicationhtplicationhttpprequest.getaTtribute( ApplicationHttpRequest.java:210) at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:222) at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:222) at org.apache.catalina 。

我的 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>
有帮助吗?

解决方案

我能够解决这个问题。显然,您无法将 web.xml 配置为具有与 Faces Servlet url-pattern (*.jsp) 相同的 Javax.faces.DEFAULT_SUFFIX .jsp 参数值。如果您将 url-pattern 更改为 .jspx 或 /whateverdirnameyouwant/ 应用程序启动时没有堆栈溢出错误。(笔记:关键是 DEFAULT_SUFFIX 和 Faces Servlet url-pattern 不能相同,无论它们是什么。)希望这可以帮助任何遇到此特定问题的其他人。

其他提示

java中的堆栈溢出几乎总是由无限递归/方法调用引起的。在给定堆栈跟踪的情况下,似乎正在重复调用“getAttribute()”直到崩溃。虽然我不太熟悉您正在使用的特定环境,但我建议检查您的 .jsp 代码是否存在任何此类行为(例如相互调用的两个方法)

所以,我也有类似的错误。对我来说,我有一个 JSF 项目,我正在搞乱文件扩展名。首先,我的所有 Web 文件的扩展名为 .jsp。这是可行的,但后来我希望它们都是 .jsf,然后我就全力使用 .xhtml。在此过程中,我的 web.xml 文件发生更改以适应 xhtml 和 jsf。更改 web.xml 文件就可以了。导致 StackOverflowError 的原因是我的 index.xhtml 带有指向 header.jsf 的 ui.include 标记。所以我有一个指向 jsf 文件的 xhtml 文件。我原以为 web.xml 能够处理这个问题,但事实并非如此,我得到了 StackOverflowError。因此,为了解决这个问题,现在我所有的 JSF 文件都有扩展名 .xhtml,并且嵌套的 ui:include 标记指向 .xhtml 文件。

但另一方面,浏览器 url 可以很好地处理 index.jsp、index.jsf、index.xhtml。因此,web.xml(带有 jsp、jsf 和 xhtml 的 servlet 映射)可以很好地处理浏览器 url,但不能解决我上面突出显示的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top