gpt4 book ai didi

java - Maven - JSF 2.0 不适用于嵌入式 tomcat

转载 作者:搜寻专家 更新时间:2023-11-01 03:06:10 27 4
gpt4 key购买 nike

我使用 JSF 2.2、Primefaces、Tomcat 7 依赖项创建了一个 Maven Web 应用程序。

我的 JSF 实现是 Mojarra 2.2.4,我在我的 POM 中添加了这个依赖项:

    <dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.4</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.4</version>
<scope>compile</scope>
</dependency>

但不幸的是,我对 tomcat7-maven-plugin 及其嵌入式 tomcat 有疑问。如果我使用 tomcat7:run 命令,我的 webapp 启动没有问题,但是当它尝试加载托管 bean 时,我收到此错误:

Target Unreachable, identifier 'testBean' resolved to null

这表明 Web 应用程序正在使用 JSF 1.x 而不是 JSF 2.xJSF 1.x 的配置器无法识别 @ManagedBean 注释,这将导致它们在不需要 faces-config.xml 的情况下无法自动加载/初始化。

我正在使用 tomcat embedded 7.0.50,使用它进行配置:http://tomcat.apache.org/maven-plugin-trunk/tomcat7-maven-plugin/adjust-embedded-tomcat-version.html

但是尽管我不认识 @ManagedBean 注释,它只在 faces-config.xml 上使用 managedbean 标签才有效。

有没有办法为 maven7-tomcat-plugin 的 Tomcat Embedded 添加 JSF 2.x 支持?

PS:tomcat7:run-war 可以工作,但我不喜欢,因为显然它是静态运行,不可能动态更改 xhtml 代码(例如)。

最佳答案

我决定按照以下步骤从 Mojarra 2.2.4 切换到 MyFaces 2.2.0:

  1. 在我的 POM 中删除 Mojarra 依赖项
  2. 在我的 POM 中添加 MyFaces 依赖项:

    <dependency>
    <groupId>org.apache.myfaces.core</groupId>
    <artifactId>myfaces-api</artifactId>
    <version>2.2.0</version>
    <scope>compile</scope>
    </dependency>

    <dependency>
    <groupId>org.apache.myfaces.core</groupId>
    <artifactId>myfaces-impl</artifactId>
    <version>2.2.0</version>
    <scope>compile</scope>
    </dependency>
  3. 更改我的 web.xml 中的监听器类

    <listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>

  4. 在我的 web.xml 中添加上下文参数

    <context-param>
    <description>Defines which packages to scan for beans, separated by commas.
    Useful for when using maven and jetty:run (version 6) or tomcat:run
    </description>
    <param-name>org.apache.myfaces.annotation.SCAN_PACKAGES</param-name>
    <param-value>eu.dedalus</param-value>

.5 从 WEB-INF/lib 中删除 jsf-api 和 jsf-impl。

.6 [仅限 ECLIPSE] 使用 M2REPO 变量在构建路径中添加 myfaces.api 和 myfaces-impl 库,并删除 jsf-api 和 jsf-impl 库。

感谢https://stackoverflow.com/users/814956/lu4242 !

关于java - Maven - JSF 2.0 不适用于嵌入式 tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21673480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com