web.xml错误页面不起作用,为什么?

时间:2011-11-09 04:26:39

标签: java jsf glassfish web.xml

我现在已经没有想法,也不知道还有什么可以尝试。关键是甚至没有一个错误 - 页面正常工作,我只是想知道,我做错了什么?,这里是代码:

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/sessionexpired.xhtml</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/500.xhtml</location>
</error-page>

在我的web.xml中使用此代码时,我收到此消息:

  

XML读取错误:找不到元素

此消息的含义是什么?我该怎么解决这个问题?感谢。

顺便说一下,我还尝试使用过滤器来处理 ViewExpiredException ,然后它在我发送POST消息并重定向到sessionexpired.xhtml时第一次工作。但是,如果我向后点击然后再次进行POST调用BAM!我再次得到 ViewExpiredException

更新30-NOV-2011 - [替代解决方案] -------------------------------- -----

过了一段时间后,我发现为了使它工作,你必须指定 .html或.jsp文件的位置,所以它最终会成为:

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/sessionexpired.html</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/500.jsp</location>
</error-page>

4 个答案:

答案 0 :(得分:1)

那么,对于那些使用Glassfish 3.1来解决这个问题的人来说,你可以按照这篇文章来处理这个问题,甚至认为我最后改为使用 sendRedirect()代替JSF导航器用于呈现 sessionexpired.xhtml 文件,但这是您的选择,它可以正常工作。你走了:

http://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2

答案 1 :(得分:0)

可能有些问题尝试这可能会有所帮助..
  <error-page>标记位于<servlet-mapping>元素之后。

<web-app>
...
<servlet>
 ...
  </servlet>
  <servlet-mapping>
    .....
  </servlet-mapping>
  ...
  <welcome-file-list>
  ...
   </welcome-file-list>
  <error-page>
    <error-code>404</error-code>
    <location>/errorpages/html404.html</location>
  </error-page>
 <taglib>
 ...
 </taglib>
 ...
</web-app>

答案 2 :(得分:0)

  

在我的web.xml中使用此代码时,我收到以下消息:

 XML read error: no element found

根据评论,结果是你在浏览器中看到这个而不是预期的错误页面。我最初解释说,由于web.xml中的语法错误,IDE /编辑器提到了它。你的问题并不完全清楚。

嗯,解决方法很简单:确保<location>的{​​{1}}与<error-page>的网址格式匹配。最简单的方法是将FacesServlet映射到FacesServlet的网址格式。


  

BTW,我也尝试使用过滤器来处理ViewExpiredException,然后它在我发送POST消息并重定向到sessionexpired.xhtml时第一次工作。但是,如果我向后点击然后再次进行POST调用BAM!我再次得到了ViewExpiredException。

这只是由浏览器缓存中请求的页面引起的,而不是直接来自服务器。有关具体解决方案,请参阅此答案:browser back + viewscope beans

答案 3 :(得分:0)

更改web.xml后,您是否进行了耳朵或战争重新部署? 如果直接转到服务器修改文件,某些应用程序服务器可能会缓存web.xml的旧副本。 希望它可以工作。 :)