如何在Spring应用程序中使用Maven将JSF2.2更新为JSF2.3
我正在使用如何在Spring应用程序中使用Maven将JSF2.2更新为JSF2.3,spring,maven,jsf,jsf-2,Spring,Maven,Jsf,Jsf 2,我正在使用MAVEN,并且已经将我的pom.xml依赖项从: <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.2.14</version> <scope>compile</scope> &
MAVEN
,并且已经将我的pom.xml
依赖项从:
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.14</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.13</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet</artifactId>
<version>2.2.9.Final</version>
</dependency>
在我的应用程序的pom.xml
或其他任何地方是否还有更多的更改
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet</artifactId>
<version>2.2.9.Final</version>
</dependency>
pom.xml
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet</artifactId>
<version>2.2.9.Final</version>
</dependency>
老问题,但对于仍然面临此问题的人来说:为了避免“找不到CDI BeanManager”错误,您的
faces config.xml
版本必须是非2.3
,而web.xml
版本必须是非4.0
Mojarra实现包含以下代码:
if (getFacesConfigXmlVersion(facesContext).equals("2.3") || getWebXmlVersion(facesContext).equals("4.0")) {
throw new FacesException("Unable to find CDI BeanManager");
}
当使用较低版本时,它会跳过此检查,并与Spring DI而不是CDI一起工作。嗯,我的answear可能看起来与此问题无关,但它。。。
我确实经历了这个例外,这不是第一次。我有一个生产环境和另一个发展环境。它们尽可能相同。我的环境是glassfish 4.1.2,更新为使用mojarra 2.3(我交换了glassfish 4/glassfish/modules/javax.faces.jar文件)。我在一个.jks文件中有一些安全证书,这些信息非常重要,一个名为“-Djavax.net.ssl.trustStorePassword”的jvm设置,默认值为“changeit”。出于某种奇怪的原因,此设置在一次部署中消失了。我不知道为什么,但它发生了。我的结论是,这个缺少的设置在异常“javax.faces.FacesException:找不到CDI BeanManager”之前引发了一个异常,我无法诊断它。这是这两种环境之间唯一的区别。因此,如果您的应用程序引发此异常,并且它使用了一些.jks文件,那么只需验证jvm设置中是否缺少此设置。您的问题标题“如何更新…”是解决此问题的一种方法。请改进标题。。。完整的堆栈跟踪很可能包含以下原因。。。我在这里只看到Spring的错误,与JSF无关。请您给我的建议@Kukeltje。。我在faces-config.xml中更新了这个问题,我想xsi:schemaLocation也应该更新为2.3:我不明白为什么GlassFish的JSF实现中包含这段漂亮的代码!jar的版本是2.3,但如果在Servlet 4.0下使用,它会引发异常?或者我错误地理解了这一点?如果您使用的是
@ManagedBean
注释,那么这是必需的。如果您使用的是@Named
(您应该这样做),则不会出现此错误
if (getFacesConfigXmlVersion(facesContext).equals("2.3") || getWebXmlVersion(facesContext).equals("4.0")) {
throw new FacesException("Unable to find CDI BeanManager");
}