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



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

有没有简单的方法可以做到这一点?我应该通过使用onError事件还是仅覆盖FullAjaxExceptionHandler.findErrorPageLocation来考虑客户端导航?

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

您确实可以通过扩展异常处理程序并重写findErrorPageLocation方法来控制它,但这样它的行为方式将不再与标准方式相同。

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

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

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


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

最新更新