这一切都在文档中:
对话范围处于活动状态:
在任何 JSF 面孔或非面孔请求的所有标准生命周期阶段。
对话上下文提供对与特定对话关联的状态的访问。每个 JSF 请求都有一个关联的对话。该关联由容器根据以下规则自动管理:
任何 JSF 请求都只有一个关联的对话。与 JSF 请求关联的对话在恢复视图阶段开始时确定,并且在请求期间不会更改。
任何对话都处于以下两种状态之一:瞬态或长时间运行。
默认情况下,对话是暂时的 暂时的对话可以通过调用 Conversation.begin() 标记为长时间运行 长时间运行的对话可以通过调用 Conversation.end() 标记为暂时的
所有长时间运行的会话都有一个字符串值的唯一标识符,该标识符可以在会话被标记为长时间运行时由应用程序设置,或者由容器生成。
如果与当前 JSF 请求相关联的会话在 JSF 请求结束时处于瞬态,则它被销毁,并且会话上下文也被销毁。
如果与当前 JSF 请求相关联的会话在 JSF 请求结束时处于长时间运行状态,则它不会被销毁。相反,它可能会根据以下规则传播到其他请求:
与呈现 JSF 视图的请求关联的长时间运行的对话上下文会自动传播到源自该呈现页面的任何面孔请求(JSF 表单提交)。与导致 JSF 重定向(由导航规则或 JSF NavigationHandler 产生的重定向)的请求相关联的长时间运行的对话上下文会自动传播到生成的非人脸请求,以及对同一 URL 的任何其他后续请求。这是通过使用名为 cid 的 GET 请求参数来完成的,该参数包含对话的唯一标识符。通过使用名为 cid 的 GET 请求参数,可以将与请求关联的长时间运行的对话传播到任何非人脸请求,该参数包含对话的唯一标识符。在这种情况下,
当没有对话传播到 JSF 请求时,该请求与新的临时对话相关联。所有长时间运行的对话都被限定在一个特定的 HTTP servlet 会话中,并且可能不会跨越会话边界。在以下情况下,传播的长时间运行的对话无法恢复并与请求重新关联:
当 HTTP servlet 会话无效时,在 servlet service() 方法完成后,在当前会话期间创建的所有长时间运行的会话上下文都将被销毁。允许容器任意销毁与当前没有 JSF 请求相关联的任何长时间运行的对话,以节省资源。
作者:加文·金、皮特·缪尔