我使用omnifaces FullAjaxExceptionHandler重定向时发生任何异常与ajax请求,在我的情况下捕获ViewExpiredException。重定向后的JSF Ajax(ViewRoot)更新
我会尽力解释我的情况:?
1)我有一个命令按钮(Ajax请求的index.xhtml页)无效的会话,并返回一个动作像这样“/登录面临重定向=真”。
2)在同一浏览器中打开index.xhtml两次。
3)在第一个的index.xhtml中单击按钮(会话是无效,并重定向到login.xhtml)
在这一点上您考虑我有一个自定义的PhaseListener来检查用户是否成功地记录,login.xhtml是向公众开放,但的index.xhtml仅限于授权用户,web.xml中的视图过期,403错误是:
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/index.xhtml</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/403.xhtml</location>
</error-page>
4)转到第二的index.xhtml(会话无效在这一刻),现在点击按钮启动异常。
FullAjaxExceptionHandler捕获ViewExpiredException并尝试呈现index.xhtml,但同时我的phaselistener正在检查用户是否被授权,如会话失效,用户未被授权,并且我的PhaseListener触发responseSendError(403) ,但没有显示403.xhtml,因为是ajax请求。
如何从我的PhaseListener发送403错误以显示403.xhtml? responseSendError取消了FullAjaxExceptionHandler的正常处理,此时此异常发生时不发生重定向。
此外,为了澄清视图何时到期,我需要重定向到index.xhtml,因为在生产中我使用CAS(中央身份验证服务)。
在这种情况下,我需要读取web.xml以获取配置的错误页面。我会改变我的代码。谢谢Balus。 – Kab 2013-02-20 13:19:23