我们有一个使用JSF2和Spring的应用程序.部署时应用程序正常运行.但如果我完成以下步骤,就会发生这种情况:
尝试使用以前打开的登录页面登录,它显示以下异常:
javax.servlet.ServletException: null source
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
root cause
java.lang.IllegalArgumentException: null source
at java.util.EventObject.<init>(EventObject.java:38)
at javax.faces.event.SystemEvent.<init>(SystemEvent.java:67)
at javax.faces.event.ComponentSystemEvent.<init>(ComponentSystemEvent.java:69)
at javax.faces.event.PostRestoreStateEvent.<init>(PostRestoreStateEvent.java:69)
at com.sun.faces.lifecycle.RestoreViewPhase.deliverPostRestoreStateEvent(RestoreViewPhase.java:256)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:245)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:107)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
Run Code Online (Sandbox Code Playgroud)如果我单击第一个登录页面然后输入登录详细信息,则应用程序不会中断.只有当我尝试将以前加载的登录页面与新部署的应用程序一起使用时,才会出现这种情
谁知道答案?
Bal*_*usC 13
这应该是作为一个抛出的ViewExpiredException.这是一个开始在Mojarra 2.0.3中出现的错误,并已在Mojarra 2.1.0中修复.另请参阅问题1762(请注意,Mojarra 2.1.0 不适用于Tomcat/Jetty,至少使用Mojarra 2.1.1).
基本上,当Mojarra无法构建或恢复视图时,它通常会抛出一个特定的足够异常,但由于这个错误,后来在代码中错误地预期了有效视图,这反过来导致了IllegalArgumentException: null source.可能的真正原因可能是视图包含一个简单的XML语法错误,例如缺少标记或损坏的属性值,Mojarra通常会FaceletException使用行号和位置等非常详细的消息抛出该错误.
为了防止这种情况ViewExpiredException,您必须在对其执行任何操作之前通过GET请求刷新页面.如果您使用的是钻嘴鱼科的版本,其中这个错误不会明显(如2.0.2或以上,或2.1.0或更高版本),那么你可以优雅地与处理它<error-page>在web.xml特定的异常,并提供自定义错误页,其中最终用户被告知会话已过期,以及指向初始请求URI的链接.
| 归档时间: |
|
| 查看次数: |
25868 次 |
| 最近记录: |