Jsf 2 JSF对话?cid-当有人给页面添加书签时,会是一团乱麻吗?

Jsf 2 JSF对话?cid-当有人给页面添加书签时,会是一团乱麻吗?,jsf-2,cdi,jboss7.x,Jsf 2,Cdi,Jboss7.x,在JBossAS7中工作,使用对话范围在浏览器选项卡中管理用户的交互 我注意到我的页面附加了?cid参数。这是伟大的-直到用户书签的网页,然后试图返回到它!对话过滤器会显示“无此类对话”消息 有没有更好的管理对话的方法?也许是一个实现或一个开关,使其使用隐藏字段(在AJAX中要适当小心)?或者,我必须开始尝试拦截对话异常或修改过滤器 谢谢 -理查德 进一步: 我截取BeforeRestoreView事件用于其他目的(主要是登录处理)。你会认为这是可行的: /** * @return true

在JBossAS7中工作,使用对话范围在浏览器选项卡中管理用户的交互

我注意到我的页面附加了?cid参数。这是伟大的-直到用户书签的网页,然后试图返回到它!对话过滤器会显示“无此类对话”消息

有没有更好的管理对话的方法?也许是一个实现或一个开关,使其使用隐藏字段(在AJAX中要适当小心)?或者,我必须开始尝试拦截对话异常或修改过滤器

谢谢 -理查德

进一步:

我截取BeforeRestoreView事件用于其他目的(主要是登录处理)。你会认为这是可行的:

/**
 * @return true if there is no valid Conversation context.
 */
private boolean conversationNotActive()
{
    Context conversationContext = m_beanManager.getContext(ConversationScoped.class);
    return !conversationContext.isActive();
}

但我无法获得上下文来询问它是否处于活动状态!现在,我们将尝试一次捕获。

我们现在采取双管齐下的方法

相当复杂的会话管理器会检测到错误的会话Id并采取适当的操作。它当前响应恢复后视图事件。我想早些移动它,但在这个阶段导出视图ID时遇到问题。我已经编写了一个JSF到CDI的桥接器,将事件传递给CDI。SeamFaces也会这么做,但对我们来说太重了

对于正常的GET,对话管理器将重定向到self,而不使用cid参数,以便启动新的对话。对于回发,它返回HTTP 410错误。死亡对话的检测如上所述。我们可以在创建对话时使用更随机的对话Id,以避免在重复使用Id时发生冲突

会话管理器还将根据其保存的有关页面的元数据启动会话。(所有在/forms/下的页面都需要在我们的应用程序中进行对话)。它在执行此操作时使用重定向,以确保CID参数位于需要的任何位置。如果我能够解决在RestoreView阶段之前获取表单ID的问题,那么这可能就没有必要了


我们使用浏览器历史API从用户的浏览器URL窗口中删除cid。

这已经解决了它,但我仍然有兴趣知道是否有更好的方法-不那么突兀(也不太与容器实现耦合)。您好,请进一步详细说明您为该问题找到的解决方案,也许是一些基本的代码?我一年多前离开了那家公司,所以再也不能使用这些代码了。很抱歉,上面的内容没有那么有用,因为现在我不知道我做了什么。