有没有办法在JSF / AJAX中为异常动态配置错误页面?

时间:2013-09-29 13:37:32

标签: ajax jsf omnifaces jsf-2.2

我想在JSF中动态设置错误页面。具体来说,我想要做的是ViewExpiredException刷新页面。我目前正在使用omnifaces FullAjaxExceptionHandler来管理我的异常,但它会从web.xml读取错误页面。

有一种简单的方法吗? 我应该使用onError事件考虑客户端导航还是仅覆盖FullAjaxExceptionHandler.findErrorPageLocation

1 个答案:

答案 0 :(得分:1)

它从web.xml读取错误页面,因为如果您没有首先使用JSF ajax,那么这是使用它们的标准方式。换句话说,FullAjaxExceptionHandler确保异常处理和错误页面呈现的行为与您不使用ajax时的行为完全相同。 <h:commandButton>没有<f:ajax><p:commandButton ajax="false">,或者因为最终用户已停用JS。

您确实可以通过扩展异常处理程序并覆盖findErrorPageLocation方法来控制它,但之后它的行为将不再像标准方式那样。

或者,在您的特定情况下可能更好的方法是,只为ViewExpiredException指定一个特定的错误页面,并按常规请求属性获取初始页面,并让JavaScript在页面加载时重定向到它。 / p>

<h:outputScript>
    window.location = "#{requestScope['javax.servlet.error.request_uri']}";
</h:outputScript>

作为奖励,它将与您不使用JSF ajax的方式完全相同。


我只是想知道这一切会如何改善用户体验。这可能只会让最终用户感到困惑;在回发期间会话过期时,重新加载自身而没有任何其他反馈的页面。