我想在JSF中动态设置错误页面。具体来说,我想要做的是ViewExpiredException
刷新页面。我目前正在使用omnifaces FullAjaxExceptionHandler
来管理我的异常,但它会从web.xml
读取错误页面。
有一种简单的方法吗?
我应该使用onError
事件考虑客户端导航还是仅覆盖FullAjaxExceptionHandler.findErrorPageLocation
?
答案 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的方式完全相同。
我只是想知道这一切会如何改善用户体验。这可能只会让最终用户感到困惑;在回发期间会话过期时,重新加载自身而没有任何其他反馈的页面。