带有JSF 2.2的javaee-api-7.0:f:ajax不提交

时间:2015-04-27 12:57:52

标签: jsf java-ee-7

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

你确实不应该在webapp的运行时类路径中拥有那个JAR。这种库应该已经由目标Java EE容器提供。 Java EE容器的示例有WildFly,GlassFish,Liberty,TomEE等。然而,您可以使用Tomcat,它是一个准系统servlet容器,仅支持来自庞大的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上运行所需的一切。

另见: