Faces Servlet抛出异常java.lang.*Error
好吧,自从我加入这个网站后,我已经运行了我的第一个*Error,我想这是一个必须发布:-)。我的环境是Seam 2.0.1.GA,JBoss 4.2.2.GA,我正在使用JSF。我正在从facelets视图转换为JSP,以利用现有网站上使用的一些现有JSP标记。我尝试渲染jsp页面时,更改了faces-config.xml和web.xml配置文件并开始接收以下错误。任何人有任何想法?Faces Servlet抛出异常java.lang.*Error
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.*Error 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>
我能弄清楚这个问题。显然,您不能将web.xml配置为具有与Faces Servlet url模式(* .jsp)相同的Javax.faces.DEFAULT_SUFFIX的.jsp参数值。如果您将网址格式更改为.jspx或更改为/ whateverdirnameyouwant/,则应用程序启动时不会发生堆栈溢出错误。 (注意:关键在于DEFAULT_SUFFIX和Faces Servlet url模式无论如何都不能相同)。希望这可以帮助任何遇到这个特定问题的人。
堆栈溢出在Java几乎总是由无限的递归/方法调用引起的。在给出堆栈跟踪的情况下,看起来'getAttribute()'被重复调用直到崩溃。虽然我并不熟悉您使用的特定环境,但我建议您检查您的.jsp代码是否存在这种类型的行为(例如,两种方法可以相互调用)
所以,我有一个类似的错误。对我来说,这是我有一个JSF项目,我正在搞文件扩展名。首先,我的所有网页文件的扩展名为.jsp。这是行得通的,但是我希望它们都是.jsf,然后我全部使用.xhtml。在这个过程中,我的web.xml文件改变为适应xhtml和jsf。更改web.xml文件很好。是什么让我的*Error是我有一个指向header.jsf的ui.include标签的index.xhtml。所以我有一个xhtml文件指向一个jsf文件。我曾经认为web.xml能够处理这个,但它没有,我得到了*Error。所以,为了解决这个问题,现在我所有的JSF文件都有扩展名.xhtml,嵌套的ui:include标签指向.xhtml文件。
另一方面,浏览器url可以处理index.jsp,index.jsf,index.xhtml就好了。所以web.xml(使用jsp,jsf和xhtml的servlet映射)可以很好地处理浏览器URL,但不能解决上面突出显示的问题。
您可能希望使开头语句更清楚。第一印象是这是网站本身的堆栈溢出错误。 ;) 不是每个人都知道java。 – 2008-09-17 17:21:10
我有一个同事得到相同的错误(代码适用于我),但模式应该是正确的(.xhtml与* .seam) - 是在这种情况下重要的Seam过滤器映射? – larsivi 2008-09-24 12:23:57