我正在尝试在Tomcat 7 webserver上使用Apache MyFaces 2.1.8运行JSF 2.0 webapp。当我尝试加载一个简单的页面时,我收到此错误:
java.lang.IllegalStateException:没有为此应用程序配置的工厂。如果faces-initialization完全不起作用,则会发生这种情况 - 请确保正确包含基本面应用程序所需的所有配置设置,并且包含所有必需的lib。还要检查Web应用程序和容器的日志记录输出是否有异常!
如果你这样做并且一无所获,那么错误可能是由于您使用了一些特殊的Web容器,这些容器不支持通过TLD文件注册上下文侦听器,并且您的web.xml中未设置上下文侦听器。 典型的配置看起来像这样;
<listener> <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class> </listener>
我应该怎么做才能修复它?感谢名单!
编辑:
的pom.xml
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
<version>2.1.8</version>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>2.1.8</version>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-bundle</artifactId>
<version>2.1.8</version>
</dependency>
答案 0 :(得分:1)
我点击相同的错误消息,使用我所知道的一个好的JSF portlet项目设置(即web.xml,faces-config.xml和我的caselet中的值都是准确的)。
事实证明我的问题是由于包含Apache commons jar文件引起的;我还没有确定哪一个特别导致了这个问题,但是在从项目中删除以下jar作为依赖项之后,错误已经停止显示:
看看这个列表,看来“commons-codec-1.3.jar”和“commons-logging-1.1.1.jar”罐子在我的设置和你的设置之间很常见,所以可能首先要删除其中一个或两个看看它有什么不同?
编辑:我在另一个项目中再次遇到问题,该项目在Web应用程序中存在commons-logging-1.1.1.jar,删除它会阻止错误显示。