Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 在ajax请求中引发ViewExpiredException时重定向_Jsf 2_Richfaces_Omnifaces - Fatal编程技术网

Jsf 2 在ajax请求中引发ViewExpiredException时重定向

Jsf 2 在ajax请求中引发ViewExpiredException时重定向,jsf-2,richfaces,omnifaces,Jsf 2,Richfaces,Omnifaces,我在处理ajax请求中的viewExpiredException时遇到问题。 在我的特殊情况下,它是一个丰富的:datascroller,它会产生问题。我使用omnifaces 1.8.1的FullAjaxExceptionHandler来处理Ajax组件抛出的Vee web.xml: <error-page> <exception-type>javax.faces.application.ViewExpiredException</exceptio

我在处理ajax请求中的
viewExpiredException
时遇到问题。 在我的特殊情况下,它是一个
丰富的:datascroller
,它会产生问题。我使用omnifaces 1.8.1的
FullAjaxExceptionHandler
来处理Ajax组件抛出的Vee

web.xml:

<error-page>
        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
        <location>/my/pages/error/viewExpired.xhtml</location>
</error-page>
如果会话过期,单击datascroller按钮,我会看到调用了我的handle()方法,但转发到主页的操作不起作用

对于版本1,什么都不会发生,对于版本2,我首先得到一个空白屏幕,如果我使用浏览器按钮刷新页面,handle()方法将再次被调用,并成功重定向到主页


你能在我的代码中看到任何错误吗?

重定向没有效果,因为
FullAjaxExceptionHandler
完全接管了呈现,因此JSF无法将ajax重定向写入响应。更改视图没有任何效果,因为
FullAjaxExceptionHandler
此时已经拥有错误页面视图,并且不会为更改的视图查阅
FacesContext
。因为错误页本身是空白的,所以屏幕是空白的

只需让浏览器自行重定向即可。使用JS
窗口。位置
。将整个
viewExpired.xhtml
页面替换为以下内容:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <script>window.location="#{request.contextPath}/path/to/home.xhtml";</script>
    </body>
</html>

window.location=“#{request.contextPath}/path/to/home.xhtml”;

重定向无效,因为
FullAjaxExceptionHandler
完全接管了呈现,因此JSF无法将ajax重定向写入响应。更改视图没有任何效果,因为
FullAjaxExceptionHandler
此时已经拥有错误页面视图,并且不会为更改的视图查阅
FacesContext
。因为错误页本身是空白的,所以屏幕是空白的

只需让浏览器自行重定向即可。使用JS
窗口。位置
。将整个
viewExpired.xhtml
页面替换为以下内容:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <script>window.location="#{request.contextPath}/path/to/home.xhtml";</script>
    </body>
</html>

window.location=“#{request.contextPath}/path/to/home.xhtml”;

你好,巴卢斯克!谢谢你的回答。不幸的是,这个解决方案只适用于Chrome。Firefox和IE8(实际上是我唯一需要支持的浏览器)继续显示空白页面。我注意到,空白页面的HTML“头”和VEE发生的一样。该应用程序使用servlet过滤器,既不更改响应也不进行sendRedirect():我是否必须检查其他特定内容?谢谢您的ajax是否由RichFaces处理?我用另一个选项更新了答案。是的。并且使用Javascript重定向工作!:)再次感谢你!嗨,巴卢斯克!谢谢你的回答。不幸的是,这个解决方案只适用于Chrome。Firefox和IE8(实际上是我唯一需要支持的浏览器)继续显示空白页面。我注意到,空白页面的HTML“头”和VEE发生的一样。该应用程序使用servlet过滤器,既不更改响应也不进行sendRedirect():我是否必须检查其他特定内容?谢谢您的ajax是否由RichFaces处理?我用另一个选项更新了答案。是的。并且使用Javascript重定向工作!:)再次感谢你!
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <script>window.location="#{request.contextPath}/path/to/home.xhtml";</script>
    </body>
</html>