配置com.sun.faces.config.ConfigureListener

Lau*_*ntG 12 jsf jsf-2 mojarra

我正在审查当前的JSF项目,其中web.xml配置包含:

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

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

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

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

Bal*_*usC 14

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

存在自动注册经由.tld文件不足的情况.众所周知的是将webapp部署到Jetty.本问答中详细解释了这一点:找不到Factory:javax.faces.context.FacesContextFactory.

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

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


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