не удалось найти Factory: javax.faces.application.ApplicationFactory - PullRequest
4 голосов
/ 31 октября 2011

Привет, я пытаюсь использовать следующие технологии вместе:

  • JSF 2.1.0
  • ICEFaces 2.0.2 , чтосогласно их документации, отлично работает с JSF 2.1.x
  • Tomcat 6

my web.xml :

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      version="2.5"> 

  <display-name>appName</display-name>

  <listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>

  <listener>
    <listener-class>
        org.springframework.web.context.request.RequestContextListener
    </listener-class>
  </listener>

  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
        classpath:META-INF/spring/applicationContext.xml
        </param-value>

  </context-param>


  <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
  </context-param>

  <welcome-file-list>
    <welcome-file>/</welcome-file>
  </welcome-file-list>



  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>

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

  <context-param>
    <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
  </context-param>


  <servlet>
    <servlet-name>Resource Servlet</servlet-name>
    <servlet-class>com.icesoft.faces.webapp.CompatResourceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Resource Servlet</servlet-name>
    <url-pattern>/xmlhttp/*</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>

</web-app>

но при попытке запустить мое приложение я получил следующее исключение:

SEVERE: Unexpected exception when attempting to tear down the Mojarra runtime
java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.application.ApplicationFactory
    at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:815)
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:317)
    at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:112)
    at com.sun.faces.config.ConfigureListener.contextDestroyed(ConfigureListener.java:329)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4245)
    at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4886)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4750)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

есть идеи почему?

Ответы [ 2 ]

8 голосов
/ 31 октября 2011

JSF 2.1 требуется контейнер, совместимый с Servlet 3.0, а Tomcat 6 - это только контейнер , совместимый с Servlet 2.5 . У вас есть 2 варианта:

  1. Понизьте JSF 2.1 до JSF 2.0 (Mojarra 2.0 - в настоящее время в 2.0.6).
  2. Обновите Tomcat 6.0 до Tomcat 7.0 (и измените web.xml корневая декларация в соответствии с Servlet 3.0).

Если вы выберете вариант 2 (обновление до Tomcat 7.0), вам следует обновить Mojarra 2.1.0 до как минимум Mojarra 2.1.1 (сейчас уже на 2.1.3 ). Это необходимо, поскольку Mojarra 2.1.0 содержит ошибку в сканере аннотаций, которая делает его несовместимым с Tomcat и Jetty.

Смотри также:

0 голосов
/ 24 июня 2015

Я решил эту проблему, используя два подхода:

1.Два разных версии jsf были удалены (например, jsf 1.x или jsf2.x) или две разные реализации jsf были удалены (mojarra jsf или myfaces) из проекта. И я использовал только одну реализацию, либо mojarra (или myfaces) ), но не оба. Я сделал то же самое в случае jsf с разными версиями jar (то есть были использованы jsf 2.x jar), а не jsf 1.x.

2. Удалить аннотацию @ManagedBean из интерфейсов.

...