我在 JSF 2.0 中遇到了与 Ajax 相关的问题
我们在同一个 EAR 中有 2 个 Web 项目 (WAR)。 第一个项目在人脸配置中具有以下内容.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?
该com.ibm.faces.renderkit.AjaxRenderKitFactory
旨在在没有内置 ajax 支持的侏罗纪 JSF 1.x 版本中启用 ajax 支持。
从 JSF 2.0(2009 年 12 月)开始,JSF 通过新的 <f:ajax>
标记获得了内置的 ajax 支持。因此,为 JSF 1.x 设计的外部 ajax 库(例如来自 IBM 的库)变得不必要,它们甚至可能发生冲突,正如您所面对的那样。
只需将其完全删除即可。在 JSF 2.x 及更高版本中,不需要外部库即可使用 ajax。此外,您应该将任何 JSF 1.x 组件库升级到与 JSF 2.x 兼容的组件库。