配置com.sun.faces.config.ConfigureListener

时间:2013-11-28 10:51:43

标签: jsf jsf-2 mojarra

我正在审核web.xml配置包含的当前JSF项目:

  • FacesServlet(在*.xhtml上配置)
  • com.sun.faces.config.ConfigureListener

我正在使用JSF 2.2和Mojarra实现。

我对ConfigureListener感到困惑。配置中是否需要此类?这门课的目标是什么?我找不到任何信息,班级几乎没有javadoc。

如果我删除此配置,一切似乎都以相同的方式工作。因此我想ConfigureListener可以或应该被删除,但我不确定。

1 个答案:

答案 0 :(得分:14)

ConfigureListener通常通过Mojarra实现JAR文件的/META-INF/jsf_core.tld文件自动注册。此外,ConfigureListener通过Servlet 3.0 ServletContainerInitializer显式注册,以解决旧的GlassFish v3错误(注意:v3,而不是3.0.x,因此实际上是第一个GF3版本)。< / p>

存在通过.tld文件的自动注册不足的情况。众所周知的是将webapp部署到Jetty。本Q&amp; A中详细解释了这一点:could not find Factory: javax.faces.context.FacesContextFactory

此外,如前所述,在详细的答案中,GlassFish v3有一个错误,其中TLD文件被扫描得太晚,因此JSF无法在适当的时刻进行必要的初始化操作。然后,您需要在webapp的ConfigureListener中明确注册web.xml

但是如果它没有在web.xml中明确注册时适用于你,那么就把它保留下来。 web.xml中的噪音更少。但是,如果您碰巧可能部署到对上述问题敏感的容器(因此当您的webapp实际上是一个公开分发的容器并且您无法控制目标容器的选择时),那么您最好将其保留在“该”。


更新:在web.xml中启用此条目时,似乎Tomcat 8.x显示错误行为:此侦听器实际上将执行两次而不是仅执行一次。结果是灾难性的:除其他外,所有JSF事件侦听器都将被注册两次,组件库将被加载两次。这仅导致运行时期间的冲突。换句话说,在部署到Tomcat时,请确保已从web.xml中删除此条目。