Jsf Omnifaces 在通过 Jaas 调用卸载 sessiontimeout 后,结果是白屏 Empty Result

问题描述

我不知道后台到底是什么,我想知道:)

复制步骤:

  1. 获取主页

  2. Jaas 重定向登录页面

  3. 登录

  4. 登陆有状态页面

  5. 等待会话超时

  6. 刷新页面

  7. Jaas 重定向登录页面

  8. 登录

  9. 登陆白屏。 (但重装后一切正常!)

通过调试我说,第二次登录后卸载

private UIViewRoot unloadView(FacesContext context,String viewId) {
    UIViewRoot createdView = createView(context,viewId);
    ResponseStateManager manager = getRenderKit(context).getResponseStateManager();

    if (restoreViewRootState(context,manager,createdView)) {
        context.setProcessingEvents(true);
        context.getApplication().publishEvent(context,PreDestroyViewMapEvent.class,UIViewRoot.class,createdView);
        Hacks.removeViewState(context,viewId);
    }
    else if (isSessionNew(context)) {
        redirectPermanent(context,getRequestURIWithQueryString(context));
    }

    responseComplete();   // This row return with empty page
    return createdView;
}

我认为卸载帖子第二次被 JAAS 捕获,而不是页面 GET。 但我不知道为什么。

感谢您的回答!

解决方法

我的解决方案是在客户端。有一个 JS 方法,就是在 sessiontimeout 之后调用的。

我把这一行放在那个方法中:

OmniFaces.Unload.disable();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...