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