我正在将我们的主要应用程序从 Seam 2.2 迁移到 Seam 2.3beta1,以便获得 JSF 2.0 和 JPA 2.0 的一些好处。在大多数情况下,它进展顺利。然而,JSF 2.0 和 Richfaces 4.x 中的一些 Ajax 更改被证明在移植代码时存在问题。
我有一系列根据其他内容填充的组件。例如,第一个菜单选择项目类别。选择值后,从数据库中检索该类别的子类别,并充当第二菜单的选择项目。这整个过程是对话范围的。目前,代码如下所示:
<h:selectOneMenu value="#{newObjAction.category}"
required="true"
requiredMessage="You must select a category"
style="width:300px;">
<s:selectItems var="cat"
value="#{newDesignAction.designCategories}" label="#{cat.name}"
noSelectionLabel="Select a category..."
hideNoSelectionLabel="true" />
<s:convertEntity />
<a:support event="onchange" reRender="subCategoryPanel"
limitToList="true" ajaxSingle="true" status="subCategoryStatus" />
</h:selectOneMenu>
这在带有 JSF 1.2 的 Seam 2.2 中没有问题。但是,已从 JSF 2.0 中删除。我已经尝试过这样的事情:
<f:ajax listener="#{newObjAction.handleCategoryChange}">
它按预期触发事件,但有一个大问题:它没有传播对话。结果,当即将调用侦听器对象时,它被拦截,用户被重定向到定义no-conversation-view-id
的 from pages.xml
。使用时有什么方法可以传播对话<f:ajax />
吗?有没有更好的方法来实现这一点?此时,整个迁移处于静止状态,因为这是应用程序中的主要组件。
我真的很感激任何帮助或建议。