我正在审核web.xml
配置包含的当前JSF项目:
*.xhtml
上配置)com.sun.faces.config.ConfigureListener
我正在使用JSF 2.2和Mojarra实现。
我对ConfigureListener
感到困惑。配置中是否需要此类?这门课的目标是什么?我找不到任何信息,班级几乎没有javadoc。
如果我删除此配置,一切似乎都以相同的方式工作。因此我想ConfigureListener
可以或应该被删除,但我不确定。
答案 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
中删除此条目。