0

我在 JSF 2.0 中遇到了与 Ajax 相关的问题

我们在同一个 EAR 中有 2 个 Web 项目 (WAR)。第一个项目在 faces-config.xml 中有以下内容

<factory>

    <faces-context-factory>

        com.ibm.faces.context.AjaxFacesContextFactory

    </faces-context-factory>

    <render-kit-factory>

        com.ibm.faces.renderkit.AjaxRenderKitFactory

    </render-kit-factory>

</factory>

出于某种原因,com.ibm.faces.renderkit.AjaxRenderKitFactory正在阻止其他 Web 项目中的 ajax,如果我删除了此部分,则 ajax 可以正常工作。

我的意思是这里的 Ajax,渲染

    <h:form>
        <h:selectOneMenu value="#{myBean.selected}">
            <f:selectItem itemValue="#{null}" itemLabel="ABC" />
            <f:selectItem itemValue="one" />
            <f:selectItem itemValue="two" />
            <f:selectItem itemValue="three" />
            <f:ajax listener="#{myBean.listener}" render="result" />
        </h:selectOneMenu>

        <h:outputText id="result" value="#{myBean.selected} #{myBean.result}" />

但以下工作正常

        <h:commandButton value="commandButton" action="#{myBean.submit}">
            <f:ajax listener="#{myBean.listener}" render="result" />
        </h:commandButton>

        <h:outputText id="result" value="#{myBean.selected} #{myBean.result}" />

我的 faces-config 中没有这个com.ibm.faces.renderkit.AjaxRenderKitFactory那么为什么它会影响我的项目中的 Ajax?

4

1 回答 1

2

旨在在com.ibm.faces.renderkit.AjaxRenderKitFactory没有内置 ajax 支持的侏罗纪 JSF 1.x 版本中启用 ajax 支持。

<f:ajax>从 JSF 2.0(2009 年 12 月)开始,JSF 通过新标签获得了内置的 ajax 支持。因此,为 JSF 1.x 设计的外部 ajax 库(例如来自 IBM 的那些)变得不必要,它们甚至可能会发生冲突,正如您所面临的那样。

完全删除它。在 JSF 2.x 和更新版本中,您不需要外部库来使用 ajax。此外,您应该将任何 JSF 1.x 组件库升级到与 JSF 2.x 兼容的库。

于 2016-07-12T07:12:21.547 回答