Jsf @自OmniFaces 2.5 FacesView以来,ConversationScope bean的行为与@RequestScope相同

Jsf @自OmniFaces 2.5 FacesView以来,ConversationScope bean的行为与@RequestScope相同,jsf,cdi,jsf-2.2,omnifaces,Jsf,Cdi,Jsf 2.2,Omnifaces,我试图将我的JavaEE7/JSF2.2应用程序升级到OmniFaces2.6。目前我运行的是2.4版。 之后,我注意到在使用@ConversationScoped和Ajax请求时出现了一种奇怪的行为。调用时,应在请求后呈现的区域将被清除(服务器上无异常,响应状态代码200) 接下来,我有一种基于@ConversationScoped的向导实现。它包含一个名为ViewManager的类,该类本身有一个视图列表。初始化工作正常,此列表已填充。但在提交第一个表单/视图时,它会被清除(设置为null)

我试图将我的JavaEE7/JSF2.2应用程序升级到OmniFaces2.6。目前我运行的是2.4版。 之后,我注意到在使用
@ConversationScoped
和Ajax请求时出现了一种奇怪的行为。调用时,应在请求后呈现的区域将被清除(服务器上无异常,响应状态代码200)

接下来,我有一种基于
@ConversationScoped
的向导实现。它包含一个名为
ViewManager
的类,该类本身有一个视图列表。初始化工作正常,此列表已填充。但在提交第一个表单/视图时,它会被清除(设置为null)。初始化后不会调用此设置程序,因此我的代码不会更改它。不知何故,视图管理器实例仍然可用,只有视图管理器中的这个视图列表是空的,这有点奇怪

在OmniFaces2.4中,一切都很好(这就是为什么我没有添加向导的一些代码)。我查看了变更日志,注意到使用
无扩展URL
时的
多视图
配置。我不知道为什么这会影响我的问题,但我试过了…没有成功。 我不知道有什么问题,也许你能帮我


提前感谢:)

在OmniFaces中,FacesView无扩展URL功能在2.5版中得到了彻底的改进,以支持您可以继续阅读的所谓多视图

在这次大修期间,我在
FacesViewsViewHandler
中犯了一个向后兼容性错误,其中操作
操作URL以包括多视图功能的虚拟文件夹。查询字符串参数已从原始操作URL中删除,而未添加回

@ConversationScoped
依赖于
操作URL中存在的
cid
请求参数,如
/context/page?cid=1
中所示。这就变成了
/context/page
,因此在回发过程中不会保留对话

我将在下一个OmniFaces版本中解决这个问题,因为现在您可以通过将下面的上下文参数添加到
web.xml
中来恢复所需的行为

<context-param>
    <!-- Workaround for disappearing @ConversationScoped ?cid= parameter -->
    <!-- This can be removed in next OmniFaces version after 2.6 -->
    <param-name>org.omnifaces.FACES_VIEWS_VIEW_HANDLER_MODE</param-name>
    <param-value>BUILD_WITH_PARENT_QUERY_PARAMETERS</param-value>
</context-param>

org.omnifaces.FACES\视图\处理程序\模式
使用\u父\u查询\u参数生成\u

此参数触发另一种构建URL的方式,从而显式保留原始操作URL中的整个查询字符串。

是否使用FacesView@ConversationScope依赖于存在的特定请求参数。从理论上讲,这可能是以某种方式丢失的。据我所知,我使用的是
无扩展URL
,仅此而已。org.omnifaces.FACES\u view\u SCAN\u path/*.xhtml啊,太棒了!这解决了我所有的问题。非常感谢你!