【问题标题】:Winstone: could not find Factory: javax.faces.context.FacesContextFactoryWinstone:找不到工厂:javax.faces.context.FacesContextFactory
【发布时间】:2012-01-16 20:36:39
【问题描述】:

我无法在 Winstone 服务器上发布 JSF2 应用程序。

服务器配置良好,当我删除时

<load-on-startup>1</load-on-startup>

从web.xml,正常启动:

但是当我尝试启动 indew.xhtml 时,服务器报告:

我的 web.xml 的一部分:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         id="WebApp_ID" version="2.5">
  <display-name>PIA</display-name>
  <session-config>
    <session-timeout>60</session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
  </welcome-file-list>
  <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>

  <context-param>
    <description>State saving method: 'client' or 'server'.</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>
  <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
  </context-param>
</web-app>

更新:我试过winstone 1.0.0.jar,它报告了这个:

但我的 WEB-INF\lib 文件夹中有 slf4j-api-1.6.4.jarslf4j-log4j12-1.6.4.jar... 应该是哪里出了问题?

【问题讨论】:

    标签: jsf winstone


    【解决方案1】:

    将此添加到您的 web.xml 以显式注册应该配置 JSF 工厂的侦听器。

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

    另一种可能的解决方案是从 FacesServlet 中删除 &lt;load-on-startup&gt;,但我从未使用过 Winstone,因此我无法保证这是否适用于该服务器。

    这种变通方法在不错的服务器中通常不是强制性的,但在较差的服务器中却是强制性的。如需更多背景信息,另请参阅could not find Factory: javax.faces.context.FacesContextFactory


    更新根据 cmets,添加侦听器后异常消失,但现在出现 Error instantiating listener class: com.sun.faces.config.ConfigureListener 没有任何堆栈跟踪。吞下堆栈跟踪似乎是一个 Winstone 错误,它是 fixed in 1.0.0。试一试,它现在应该会显示问题的真正原因。


    Update 2 根据问题更新,真正的原因似乎是org.slf4j.loggerFactory 上的NoClassDefFoundError。然而,Mojarra 并没有以任何方式使用它。堆栈跟踪还表明这是在加载任何侦听器之前发生的。换句话说,这可能是一个与 Winstone 有关的不同问题。显然 Winstone 本身需要那个库。将其添加到 Winstone 的运行时类路径而不是 /WEB-INF/lib

    【讨论】:

    • 谢谢 Balusc,但现在它说:[Winstone 2011/12/09 16:29:01] - Error instantiating listener class: com.sun.faces.config.ConfigureListener....:/
    • 那么根本原因是什么?您使用的是 Mojarra 还是 MyFaces?我以某种方式假设 Mojarra...
    • 好的,说说根本原因。此消息只是一条非正式消息,它告诉您在创建侦听器期间发生了异常。您需要查找此异常并说明它。顺便说一句,删除&lt;load-on-startup&gt; 怎么样? 理论上这可能行得通。
    • 我不知道,每当我尝试启动包含 JSF 的 xhtml 时。我什至无法使用Datatables.war 示例部署您的。同样的问题...第一页还可以,但是如果我用JSF选择下一页,就会出现问题
    • 如果我删除它,一切都很好,直到用 JSF 开始第一页:)
    猜你喜欢
    • 2011-12-14
    • 2012-03-05
    • 1970-01-01
    • 2014-04-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    相关资源
    最近更新 更多