【问题标题】:java.lang.IllegalStateException: Could not find backup for factory javax.faces.context.FacesContextFactoryjava.lang.IllegalStateException:找不到工厂 javax.faces.context.FacesContextFactory 的备份
【发布时间】:2014-09-07 09:38:48
【问题描述】:

我收到 java.lang.IllegalStateException:找不到工厂 javax.faces.context.FacesContextFactory 的备份。当我将我的 webapp 部署为 .war 时。有谁知道从哪里开始寻找这个问题的根本原因?该应用程序在 Eclipse IDE 中按预期运行,但当导出为部署在公开可用的独立 TomEE 环境中的战争时,它会失败。

非常感谢。

我的配置: Apache TomEE - WebProfile 1.6.0.2 JSF 2.2.7 (com.sun.faces)(Mojarra lib 2.2.0)

Maven 4.0.0

java.lang.IllegalStateException: Could not find backup for factory javax.faces.context.FacesContextFactory. 
    javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1004)
    javax.faces.FactoryFinder.getFactory(FactoryFinder.java:316)
    javax.faces.webapp.FacesServlet.init(FacesServlet.java:302)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    java.lang.Thread.run(Thread.java:744)

web.xml:

<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" 
    version="3.0">
  <display-name>ProjName</display-name>
  <welcome-file-list>
    <welcome-file>login.xhtml</welcome-file>
  </welcome-file-list>
  <listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  </listener>
  <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
  </context-param>
   <context-param>
        <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
        <param-value>true</param-value>
    </context-param>
  <context-param>
    <param-name>com.sun.faces.forceLoadConfiguration</param-name>
    <param-value>true</param-value>
  </context-param>

  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>

  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>

.war WEB-INF/lib目录下导出的jar包:

WEB-INF/lib/javax.faces.jar
WEB-INF/lib/javax.faces-api-2.2.jar
WEB-INF/lib/jsf-api-2.2.7.jar
WEB-INF/lib/jsf-impl-2.2.7.jar
WEB-INF/lib/poi-3.10-FINAL.jar
WEB-INF/lib/commons-codec-1.5.jar
WEB-INF/lib/poi-ooxml-3.10-FINAL.jar
WEB-INF/lib/poi-ooxml-schemas-3.10-FINAL.jar
WEB-INF/lib/xmlbeans-2.3.0.jar
WEB-INF/lib/stax-api-1.0.1.jar
WEB-INF/lib/dom4j-1.6.1.jar
WEB-INF/lib/xml-apis-1.0.b2.jar
WEB-INF/lib/cxf-bundle-jaxrs-2.7.11.jar
WEB-INF/lib/woodstox-core-asl-4.2.1.jar
WEB-INF/lib/stax2-api-3.1.4.jar
WEB-INF/lib/xmlschema-core-2.1.0.jar
WEB-INF/lib/geronimo-javamail_1.4_spec-1.7.1.jar
WEB-INF/lib/wsdl4j-1.6.3.jar
WEB-INF/lib/jaxb-impl-2.1.13.jar
WEB-INF/lib/jetty-server-8.1.14.v20131031.jar
WEB-INF/lib/jetty-continuation-8.1.14.v20131031.jar
WEB-INF/lib/jetty-http-8.1.14.v20131031.jar
WEB-INF/lib/jetty-io-8.1.14.v20131031.jar
WEB-INF/lib/jetty-util-8.1.14.v20131031.jar
WEB-INF/lib/jetty-security-8.1.14.v20131031.jar
WEB-INF/lib/slf4j-api-1.7.6.jar
WEB-INF/lib/geronimo-servlet_3.0_spec-1.0.jar
WEB-INF/lib/javax.ws.rs-api-2.0-m10.jar
WEB-INF/lib/postgresql-9.3-1101-jdbc41.jar
WEB-INF/lib/commons-httpclient-3.1.jar
WEB-INF/lib/commons-logging-1.0.4.jar
WEB-INF/lib/hamcrest-all-1.3.jar
WEB-INF/lib/junit-4.11.jar
WEB-INF/lib/hamcrest-core-1.3.jar
WEB-INF/lib/httpclient-4.3.3.jar
WEB-INF/lib/httpcore-4.3.2.jar
WEB-INF/lib/commons-dbcp2-2.0.jar
WEB-INF/lib/commons-pool2-2.2.jar
WEB-INF/lib/mockito-core-1.9.5.jar
WEB-INF/lib/objenesis-1.0.jar

【问题讨论】:

    标签: maven jsf apache-tomee


    【解决方案1】:

    我通过从 web.xml 文件中删除参数解决了这个问题。

     <listener>
        <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
      </listener>
    

    删除上述文本、重建、从 Eclipse 导出战争并使用 Tomcat Web 应用程序管理器 UI 进行部署解决了该问题。显然,其中一个 jsf 罐子自 http://java.sun.com/xml/ns/javaee/web-app_3_0 以来就内置了此代码。我不知道这是事实,但请在could not find Factory: javax.faces.context.FacesContextFactory 中阅读。这里的区别是我删除了参数而不是添加它。

    【讨论】:

    • 当然,原因是为了让项目运行,但是在 Stack Overflow 上的教程或各种帖子中被误导了。你是说我可以删除 JSF 的 maven 依赖项,项目应该在 TomEE 上运行?
    【解决方案2】:

    我通过删除 web.xml 文件并将这两个方法放在 Spring 配置文件中解决了这个问题。

    @Bean
    public ServletContextInitializer servletContextCustomizer() {
            return new ServletContextInitializer() {
                @Override
                public void onStartup(ServletContext sc) throws ServletException {
    sc.setInitParameter(Constants.ContextParams.THEME, "bootstrap");
    sc.setInitParameter(Constants.ContextParams.FONT_AWESOME, "true");
    sc.setInitParameter(ProjectStage.PROJECT_STAGE_PARAM_NAME,ProjectStage.Development.name());
    sc.setInitParameter("com.sun.faces.forceLoadConfiguration", "true");
    sc.setInitParameter("contextConfigLocation", "test");
        }
      };
    }
    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        FacesServlet servlet = new FacesServlet();
        ServletRegistrationBean registration = new ServletRegistrationBean(servlet, "*.jsf");
        registration.setName("Faces Servlet");
        registration.addUrlMappings("*.jsf");
        registration.setMultipartConfig(new MultipartConfigElement((String) null));
        registration.setEnabled(true);
        registration.setLoadOnStartup(1);
        return registration;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-03
      • 2018-08-13
      • 2013-09-24
      • 2011-12-14
      • 2014-10-18
      相关资源
      最近更新 更多