2

我正在将我们的主要应用程序从 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 />吗?有没有更好的方法来实现这一点?此时,整个迁移处于静止状态,因为这是应用程序中的主要组件。

我真的很感激任何帮助或建议。

4

0 回答 0