2013-09-29 27 views
0

我想在JSF中动态设置一个错误页面。特别是我想要做的是每当我得到一个ViewExpiredException刷新页面。我目前使用omnifaces FullAjaxExceptionHandler来管理我的异常,但它从web.xml读取错误页面。有没有办法为JSF/AJAX中的异常动态配置错误页面?

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

回答

1

它从web.xml中读取错误页面,因为如果您没有首先使用JSF ajax,那么这是标准方式。换句话说,FullAjaxExceptionHandler确保异常处理和错误页面呈现的行为完全相同,就好像你不会使用例如ajax一样。 <h:commandButton>没有<f:ajax><p:commandButton ajax="false">,或者因为enduser已禁用JS。

确实可以通过扩展异常处理程序并覆盖findErrorPageLocation方法来控制它,但它不会像标准方式那样运行。

或者,在您的特定情况下,更好的方法是只指定ViewExpiredException的特定错误页面,并按照常规请求属性抓取初始页面,并在页面加载时让JavaScript重定向到该页面。

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

作为奖励,它就能准确的方式,当你不会使用JSF AJAX相同。


我只想知道这将如何改善用户体验。这可能只会让最终用户感到困惑;一个页面,当会话在回发期间过期时,它可以在没有任何额外反馈的情况下重新加载自身。

+0

感谢您的回复。你适合用户提交数据的情况,但在我的情况下,我想处理Ajax导航(渲染页面的另一部分)。在这种情况下,我想不出用户需要知道视图过期的原因。我错过了什么吗? –

+0

恩,这种方式输入表单不符合设计。所有提交的数据都丢失了,没有任何关于成功/失败提交的反馈,页面只是重新加载。这一切都很混乱。就像填写登录表单一样,登录表单也会在没有反馈的情况下重新显示。您最好展示一个“对不起,您的会话已过期”的错误页面,并附上带有表单的原始页面的链接。 – BalusC

+0

采取了点。 Facebook和LinkedIn等网站如何避免这种情况?他们只是让这个会议永远活着吗?他们在页面过期之前刷新页面吗? –

相关问题