Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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 IceFaces会话到期导致异常_Jsf_Icefaces_Session Timeout - Fatal编程技术网

Jsf IceFaces会话到期导致异常

Jsf IceFaces会话到期导致异常,jsf,icefaces,session-timeout,Jsf,Icefaces,Session Timeout,我的IceFaces应用程序在会话到期时崩溃。它没有显示“用户会话已过期”或“网络连接中断”消息 我猜是同一个页面再次被加载,并且由于支持bean代码找不到会话变量,它抛出以下异常: exception javax.servlet.ServletException: java.lang.Exception: javax.faces.FacesException: Problem in renderResponse: /main-template.jspx: User session has ex

我的IceFaces应用程序在会话到期时崩溃。它没有显示“用户会话已过期”或“网络连接中断”消息

我猜是同一个页面再次被加载,并且由于支持bean代码找不到会话变量,它抛出以下异常:

exception
javax.servlet.ServletException: java.lang.Exception: javax.faces.FacesException: Problem in renderResponse: /main-template.jspx: User session has expired or it was invalidated.

root cause
java.lang.Exception: javax.faces.FacesException: Problem in renderResponse: /main-template.jspx: User session has expired or it was invalidated.

root cause
javax.faces.FacesException: Problem in renderResponse: /main-template.jspx: User session has expired or it was invalidated.

root cause
javax.el.ELException: /main-template.jspx: User session has expired or it was invalidated.

root cause
com.icesoft.faces.webapp.http.core.SessionExpiredException: User session has expired or it was invalidated.

root cause
java.lang.IllegalStateException: PWC2778: getAttribute: Session already invalidated
异步更新处于打开状态,jsp页面具有
组件

有没有办法阻止这种情况发生

注意:我做了很多有趣的事情,比如在会话超时时重定向,以及为java.lang.Throwable显示错误页面,但我已经把它们全部注释掉了——运气不好。当重定向和错误处理都打开时,应用程序第一次将显示错误页面,然后在一段时间后重定向到“会话到期”页面


谢谢

我对RichFaces也有同样的问题,这个答案救了我:

对于许多回头和奇怪的事情,我建议看这个博客:

以下是我当前使用的代码:

package com.spectotechnologies.jsf.viewhandler;

import com.sun.facelets.FaceletViewHandler;
import java.io.IOException;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;

/**
 * Source : https://stackoverflow.com/questions/231191/jsf-login-times-out
 *
 * This ViewHandler is used to remove the ViewExpiredException problem at login
 * after the session is expired.
 *
 * @author Alexandre Lavoie
 */
public class AutoRegeneratorViewHandler extends FaceletViewHandler
{
    public AutoRegeneratorViewHandler(ViewHandler p_oViewHandler)
    {
        super(p_oViewHandler);
    }

    @Override
    public UIViewRoot restoreView(FacesContext p_oContext, String p_sViewID)
    {
        UIViewRoot oViewRoot = super.restoreView(p_oContext,p_sViewID);

        if(oViewRoot == null)
        {
            // Work around Facelet issue
            initialize(p_oContext);

            oViewRoot = super.createView(p_oContext,p_sViewID);
            p_oContext.setViewRoot(oViewRoot);

            try
            {
                buildView(p_oContext,oViewRoot);
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }

        return oViewRoot;
    }
}
您还必须将其放入faces-config.xml中:

<application>
    <view-handler>com.spectotechnologies.jsf.viewhandler.AutoRegeneratorViewHandler</view-handler>
</application>

com.spectotechnologies.jsf.viewhandler.AutoRegeneratorViewHandler

感谢您指出这一点。我已经用一个包含自定义错误500页的黑客实现了它(这显然是错误的方式)。稍后我将尝试实现此方法。