我想在 JSF 中动态设置一个错误页面。具体来说,我想做的是每当我ViewExpiredException
刷新页面时。我目前正在使用 omnifacesFullAjaxExceptionHandler
来管理我的异常,但它会从web.xml
.
是否有捷径可寻?我应该考虑使用onError
事件还是覆盖客户端导航FullAjaxExceptionHandler.findErrorPageLocation
?
它从中读取错误页面,web.xml
因为如果您首先不使用 JSF ajax,这是使用它们的标准方式。换句话说,FullAjaxExceptionHandler
确保异常处理和错误页面显示的行为与您不使用 ajax 时的行为完全相同,例如<h:commandButton>
没有<f:ajax>
, or <p:commandButton ajax="false">
,或者因为最终用户禁用了 JS。
您确实可以通过扩展异常处理程序和覆盖findErrorPageLocation
方法来控制它,但是它的行为方式将不再与标准方式相同。
或者,在您的特定情况下可能是一种更好的方法,即仅指定一个特定的错误页面ViewExpiredException
并通过通常的请求属性获取初始页面,并让 JavaScript 在页面加载时重定向到它。
<h:outputScript>
window.location = "#{requestScope['javax.servlet.error.request_uri']}";
</h:outputScript>
作为奖励,它的工作方式与您不使用 JSF ajax 时完全相同。
我只是想知道这一切将如何改善用户体验。这可能只会让最终用户更加困惑;在回发期间会话过期时重新加载自身而没有任何额外反馈的页面。