2

我有两个 web 应用程序(web-module1.war 和 web-module2.war),我想使用 web 片段(web-core.jar)来声明常见的 servlet,比如 FacesServlet。

当我在 web.xml 中声明 FacesServlet 时没有问题,但是当我将此声明移动到 web-fragment.xml 时,我收到此错误:

java.lang.IllegalStateException: No Factories configured for this Application. 
This happens if the faces-initialization does not work at all - make sure that you properly include all configuration settings necessary for a basic faces application and that all the necessary libs are included. Also check the logging output of your web application and your container for any exceptions!
If you did that and find nothing, the mistake might be due to the fact that you use some special web-containers which do not support registering context-listeners via TLD files and a context listener is not setup in your web.xml.
A typical config looks like this;
<listener>
  <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>

我对其他 servlet/filter 声明没有这个问题!

web-fragment.xml 位于 web-core.jar 的 META-INF 文件夹以及 faces-config.xml 中。

web-core.jar 被声明为 maven 依赖项(我可以在 WEB-INF/lib 中找到它)。

这是 web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" metadata-complete="false"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    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_3_0.xsd">

    <absolute-ordering>
        <name>core_web_fragment</name>
    </absolute-ordering>

</web-app>

和 web-fragment.xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-fragment metadata-complete="true" version="3.0"
    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-fragment_3_0.xsd">

    <name>core_web_fragment</name>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-*.xml</param-value>
    </context-param>
    <!-- /Spring Config -->
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</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>
    <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>*.xhtml</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>inscription.xhtml</welcome-file>
    </welcome-file-list>
</web-fragment>

我正在使用Tomcat7

4

1 回答 1

5

如果您使用的是 Apache Myfaces JSF 实现,这是一个已知错误

所以你应该改变它(例如使用 MOJARRA)

于 2015-03-26T13:50:48.880 回答