如何在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>
  • 添加CDI和焊接相关性
    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");
    }