【问题标题】:ViewExpiredException - why different behaviour?ViewExpiredException - 为什么不同的行为?
【发布时间】:2012-11-07 14:28:24
【问题描述】:

我有一个 JSF 2 应用程序并在 web.xml 中配置了以下内容:

<error-page>
        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
        <location>/error.html</location>
</error-page>

出于测试目的,我在带有 @PostConstruct 注释的 init 方法中的 @SessionScoped 类中有以下代码,以便让会话快速过期:

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
HttpSession session = (HttpSession) ec.getSession(false);
session.setMaxInactiveInterval(5);

现在,当我有一个h:commandButtonoutcome = "somepage.jsf" 时,5 秒后的点击将重定向到错误页面。

当我改为调用一些 bean 操作或使用 action 属性将页面名称放在同一个按钮上时,我会在服务器日志中看到 ViewExpiredException,但不会发生重定向。

为什么会这样?以及在会话过期后无论发生什么操作,一般如何重定向到另一个页面?

【问题讨论】:

  • 此操作是否由 ajax 请求执行?这可以解释症状。
  • 是的,有一个f:axax 参与其中。但是除此之外该怎么办,因为在页面上什么都没有发生?
  • 应该是f:ajax当然...

标签: jsf-2 viewexpiredexception


【解决方案1】:

由于发送了异步 (ajax) 请求,因此行为有所不同。 Ajax 请求需要特殊的 XML 响应。 ajax 请求的异常需要由 JavaScript 中的 jsf.ajax.addOnError 处理程序或自定义的 ExceptionHandler 处理。

默认情况下,他们在客户端没有单一形式的有用反馈。只有在项目阶段设置为Development 的 Mojarra 中,您才会看到带有异常消息的纯 JavaScript 警报消息。但就是这样。 Production 阶段没有单一形式的反馈。

使用自定义ExceptionHandler,您将能够模拟与同步请求完全相同的反馈形式。您可以解析web.xml 以找到正确的错误页面位置,在其周围创建一个新的UIViewRoot 并强制JSF 将ajax 渲染设置为@all。因为这毕竟是相当多的工作,所以 JSF 实用程序库OmniFaces 提供了一个与FullAjaxExceptionHandler 类似的开箱即用的异常处理程序。您可以找到展示页面here

【讨论】:

  • 我尝试关注您的展示,但仍然没有显示错误页面。我确实看到了来自FullAjaxExceptionHandler 的日志消息,声明Error page '/error.html' will be shown.,但它没有。我的 xhtml 按钮如下所示:&lt;h:commandButton value="Error" action="#{myHandler.raiseError}"&gt;&lt;f:ajax execute="@form" render="@form" /&gt; &lt;/h:commandButton&gt;。可能缺少什么?
  • 也许我需要添加我的运行环境:Tomcat 7.0.32、JDK 1.6.0_37、Kubuntu Linux 12.10
  • 它必须是 Facelets 页面,而不是纯 HTML 页面。这没有被检查,但在FullAjaxExceptionHandler的javadoc中明确提到。
  • 好的,我错过了这一点,谢谢。我只是认为错误页面,尤其是在处理 RuntimeExceptions 时应该非常基本,以避免在 error.xhtml 中再次出现错误。
  • 它可以反过来只包含纯 HTML。
猜你喜欢
  • 2020-04-27
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 2012-07-01
  • 2014-11-15
  • 1970-01-01
  • 2017-05-19
  • 2020-06-25
相关资源
最近更新 更多