[英]Maven - JSF 2.0 doesn't work on embedded tomcat
我使用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时,我收到此错误:
目标无法访问,标识符'testBean'已解析为null
这表明webapp使用的是JSF 1.x
而不是JSF 2.x
JSF 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:
在我的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>
在我的web.xml上更改listener-class
<listener> <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
在我的web.xml上添加context-param
<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 ONLY]
使用M2REPO变量在Build Path中添加myfaces.api和myfaces-impl库,并删除jsf-api和jsf-impl库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.