2008-09-23 167 views
2

如果我的代码抛出异常,有时(而不是每次都) - jsf显示空白页面。我正在使用facelets进行布局。 这个Sun forumn´s post报告了类似的错误,但没有答案。 其他人有相同的问题,或有解决方案? ;)JSF中的空白页面

由于一些请求。下面就跟随更datails:

的web.xml

<error-page> 
     <exception-type>com.company.ApplicationResourceException</exception-type> 
     <location>/error.faces</location> 
</error-page> 

以及与JSF堆栈是真正的异常后打印:使用JSF版本

####<Sep 23, 2008 5:42:55 PM GMT-03:00> <Error> <HTTP> <comp141> <AdminServer> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1222202575662> <BEA-101107> <[[email protected] - appName: 'ControlPanelEAR', name: 'ControlPanelWeb', context-path: '/Web'] Problem occurred while serving the error page. 
javax.servlet.ServletException: viewId:/error.xhtml - View /error.xhtml could not be restored. 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:249) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226) 
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175) 
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:525) 
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:261) 
    at weblogic.servlet.internal.ForwardAction.run(ForwardAction.java:22) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(Unknown Source) 
    at weblogic.servlet.internal.ErrorManager.handleException(ErrorManager.java:144) 
    at weblogic.servlet.internal.WebAppServletContext.handleThrowableFromInvocation(WebAppServletContext.java:2201) 
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2053) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:172) 
javax.faces.application.ViewExpiredException: viewId:/error.xhtml - View /error.xhtml could not be restored. 
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:180) 
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226) 
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124) 

I'm Mojarra 1.2_09richfaces 3.2.1.GAfacelets 1.1.13

希望一些帮助:(

+0

你介意给我们一点细节吗?你正在使用什么实现以及如何配置你的错误处理系统。 – sblundy 2008-09-23 20:59:59

+0

我重新编辑了这个问题。请看一下。 ;) – paulosuzart 2008-09-23 21:20:56

回答

2

我认为这很大程度上取决于你的JSF实现。我听说有些人会呈现空白屏幕。

我们使用将引发错误500与堆栈的一个跟踪其他超时按钮不会在没有任何错误的情况下工作,这一切都在我们的开发阶段

但我可以给你的最好建议是捕获异常并将它们记录在错误日志中你有堆栈跟踪用于稍后的调试。对于我们无法做任何事情的消息,像后端失败,我们w只需在屏幕上显示的FacesContext中添加一条致命消息并记录堆栈跟踪。

+0

感谢您的回答。其实这很难过。好的建议,我们已经跟随,但问题仍然存在。 这一点是完全赶上什么,以避免这种行为。 :( 谢谢。 – paulosuzart 2008-09-23 21:19:47

+0

以及我在我的应用程序中看到有时页面被加载blank.the原因被发现是太多的文件被打开在我的应用程序在BG活动和文件流没有被关闭在一些地方 – Inv3r53 2010-04-04 15:23:11

1

我在今天的error.jsp页面中修复了类似的问题。这不会和你的完全一样,但如果他们遇到类似的问题,它可能会指向某个正确的方向。我的问题似乎来自两个不同的来源。

首先,message异常属性未在某些引发错误页面捕获异常的servlet中设置。这些servlet使用构造函数ServletException(Throwable rootCause)捕获并重新抛出异常。

其次,在错误页面本身,原作者使用scriptlet代码来解析消息,使用String.split(message, ";");由于消息是null这失败了。我在我的错误日志中收到了一个NullPointerException以及“服务错误页面时发生问题”消息。

这两件事结合在一起,给了我一个空白页面,该页面是抛出原始异常的servlet的URL。当我使用ServletException(String message, Throwable rootCause)构造函数在Servlet中重新引发异常时,我通过提供自己的错误消息解决了我的问题,因此错误消息将不再为null。我还使用EL代替了scriptlet代码重写了error.jsp页面,但这不是严格必要的。

-1

有关JSF 2空白页,放在ExceptionHandlerWrapper.handle断点或类中重写此方法。在我的情况下,这是由于自定义代码太限制了,错误没有记录。