【问题标题】:javaee-api-7.0 with JSF 2.2: f:ajax does not submit带有 JSF 2.2 的 javaee-api-7.0:f:ajax 不提交
【发布时间】:2015-04-27 12:57:52
【问题描述】:

我有一个在 Java 8 和 Tomcat 8 上运行的 Spring 4.1.1、JSF 2.2.3、Primefaces 5.1 Web 应用程序。

在我的同事添加 javaee-api-7.0 作为 ActiveMQ 的 javax 的依赖项之前,一切都运行良好。

有了这个 jar,每个 ajax 调用都不会向后端提交数据。例如,primefaces datadatable 上的过滤器将始终传递一个空值,ajax 刷新不会考虑已处理的字段等。如果我删除 jar,一切都会重新开始工作。

不幸的是,日志没有显示任何错误,输出与不包含 jar 时完全相同。我也不确定与哪个组件发生冲突,我会假设 JSF,但我不知道,我在网上找不到任何文档。

【问题讨论】:

    标签: jsf java-ee-7


    【解决方案1】:

    在我的同事添加 javaee-api-7.0 作为 ActiveMQ 的 javax 的依赖项之前,一切都运行良好。

    您确实不应该在 webapp 的运行时类路径中包含该 JAR。这种库应该已经由目标 Java EE 容器提供。 Java EE 容器的示例有 WildFly、GlassFish、Liberty、TomEE 等。但是,您已经有了 Tomcat,它是一个准系统 servletcontainer,仅支持庞大的 Java EE API 的 JSP、Servlet 和 EL API,您必须在其上手动安装其他所有 Java EE 工件,例如 JSF 和 JMS。

    javaee-api.jar 包含 所有 Java EE API,包括 JSF API(2.2.0 版本)。在您的情况下,这个显然在类加载方面优先于您在/WEB-INF/lib 中已经拥有的 JSF API 版本。这只会导致“奇怪”的行为,因为加载的 JSF impl 版本与加载的 JSF API 版本不匹配。

    您需要以不同的方式解决它。您需要在自己的 API/impl JAR 文件中安装 JMS,就像您已经为 JSF 所做的那样,因此绝对不能通过“全局”javaee-api.jar 文件。对于 ActiveMQ,JMS API 在activemq-all.jar 中可用。改用那个。它涵盖了使 ActiveMQ 在 Tomcat 上运行所需的一切。

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2013-11-19
      • 1970-01-01
      • 2014-07-27
      相关资源
      最近更新 更多