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
Session web.xml中的会话超时不工作_Session_Jsf_Session Timeout_Viewexpiredexception - Fatal编程技术网

Session web.xml中的会话超时不工作

Session web.xml中的会话超时不工作,session,jsf,session-timeout,viewexpiredexception,Session,Jsf,Session Timeout,Viewexpiredexception,我是JSF新手,正在研究会话超时,并基于它重定向到注销页面。但它不能正常工作,并且表现出异常行为,比如,有时它会被重定向,有时它不会 web.xml的代码: <context-param> <param-name>web.TIME_OUT_PAGE</param-name> <param-value>/sessionTimeOut.html</param-value> </context-param> <

我是JSF新手,正在研究会话超时,并基于它重定向到注销页面。但它不能正常工作,并且表现出异常行为,比如,有时它会被重定向,有时它不会

web.xml的代码:

<context-param>
    <param-name>web.TIME_OUT_PAGE</param-name>
    <param-value>/sessionTimeOut.html</param-value>
</context-param>
<listener>
    <display-name>SessionTimeoutNotifier</display-name>
    <listener-class>test.web.SessionTimeoutNotifier</listener-class>
</listener>
<listener>
    <display-name>ViewExpirationListener</display-name>
    <listener-class>test.web.ViewExpirationListener</listener-class>
</listener>
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
和ViewExpirationListener.java类:

package test.web;

import java.io.IOException;
import java.util.List;

import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.application.ViewExpiredException;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

public class ViewExpirationListener implements PhaseListener {

    private static final String TIME_OUT_PAGE_PARAM = "web.TIME_OUT_PAGE";

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.APPLY_REQUEST_VALUES;
    }

    @Override
    public void afterPhase(PhaseEvent event) {
        // Do nothing.
    }

    @Override
    public void beforePhase(PhaseEvent event) {
        FacesContext facesContext = event.getFacesContext();

        List<FacesMessage> iter = facesContext
                .getMessageList(ViewExpiredException.class.getName());

        List<FacesMessage> msgs = facesContext.getMessageList();
        int count = 1;


        if (iter.size() > 0) {
            handleTimeOut(facesContext);
        }

    }

    private void handleTimeOut(FacesContext facesContext) {
        ExternalContext extContext = facesContext.getExternalContext();

        String timeOutPage = extContext.getRequestContextPath()
                + extContext.getInitParameter(TIME_OUT_PAGE_PARAM);

        try {
            extContext.redirect(timeOutPage);
        } catch (IOException e) {
            throw new FacesException(e);
        }

        facesContext.responseComplete();
    }

}
package test.web;
导入java.io.IOException;
导入java.util.List;
导入javax.faces.FacesException;
导入javax.faces.application.FacesMessage;
导入javax.faces.application.ViewExpiredException;
导入javax.faces.context.ExternalContext;
导入javax.faces.context.FacesContext;
导入javax.faces.event.PhaseEvent;
导入javax.faces.event.PhaseId;
导入javax.faces.event.PhaseListener;
公共类ViewExpirationListener实现PhaseListener{
私有静态最终字符串TIME\u OUT\u PAGE\u PARAM=“web.TIME\u OUT\u PAGE”;
@凌驾
公共PhaseId getPhaseId(){
返回PhaseId.APPLY_REQUEST_值;
}
@凌驾
公共无效后阶段(阶段事件事件){
//什么也不做。
}
@凌驾
前期公共无效(阶段事件事件){
FacesContext FacesContext=event.getFacesContext();
列表iter=facesContext
.getMessageList(ViewExpiredException.class.getName());
List msgs=facesContext.getMessageList();
整数计数=1;
如果(iter.size()>0){
handleTimeOut(facesContext);
}
}
专用void handleTimeOut(FacesContext FacesContext){
ExternalContext=facesContext.getExternalContext();
字符串timeOutPage=extContext.getRequestContextPath()
+getInitParameter(超时页面参数);
试一试{
重定向(timeOutPage);
}捕获(IOE异常){
抛开新面孔(e);
}
facesContext.responseComplete();
}
}
在30分钟不活动后,它仍然不会每次都重定向。有时超时在31分钟时仍有效,有时会话在5小时后仍处于活动状态

我不知道我错在哪里,怎么做才能解决这个问题


提前感谢您的帮助…

在解决
ViewExpiredException
问题时,您似乎走错了路,“有时”适用于ajax和非ajax请求。在这种情况下,这是否有助于理解和解决具体问题?那么,在这种情况下应该做些什么来获得正确的结果呢?阅读给定的链接,并根据所学到的经验重新思考当前的模糊问题。我明白了,我删除了ViewExpirationListener类,并在web.xml
javax.faces.application.ViewExpiredException/sessionTimeOut.html
中添加了此代码,但我的问题仍然存在,即使30分钟后,应用程序也没有重新定向到sessionTimeOut.html页面。。。。
package test.web;

import java.io.IOException;
import java.util.List;

import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.application.ViewExpiredException;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

public class ViewExpirationListener implements PhaseListener {

    private static final String TIME_OUT_PAGE_PARAM = "web.TIME_OUT_PAGE";

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.APPLY_REQUEST_VALUES;
    }

    @Override
    public void afterPhase(PhaseEvent event) {
        // Do nothing.
    }

    @Override
    public void beforePhase(PhaseEvent event) {
        FacesContext facesContext = event.getFacesContext();

        List<FacesMessage> iter = facesContext
                .getMessageList(ViewExpiredException.class.getName());

        List<FacesMessage> msgs = facesContext.getMessageList();
        int count = 1;


        if (iter.size() > 0) {
            handleTimeOut(facesContext);
        }

    }

    private void handleTimeOut(FacesContext facesContext) {
        ExternalContext extContext = facesContext.getExternalContext();

        String timeOutPage = extContext.getRequestContextPath()
                + extContext.getInitParameter(TIME_OUT_PAGE_PARAM);

        try {
            extContext.redirect(timeOutPage);
        } catch (IOException e) {
            throw new FacesException(e);
        }

        facesContext.responseComplete();
    }

}