我正在审查当前的 JSF 项目,其中 web.xml
配置包含:
*.xhtml
上配置)com.sun.faces.config.ConfigureListener
我正在使用 JSF 2.2 和 Mojarra 实现。
我对
ConfigureListener
感到困惑.配置中需要这个类吗?这门课的目标是什么?我找不到任何信息,而且该类(class)几乎没有 javadoc。如果我删除此配置,一切似乎都以相同的方式工作。因此我猜
ConfigureListener
可以或应该删除,但我不确定。
最佳答案
ConfigureListener
通常通过 /META-INF/jsf_core.tld
自动注册Mojarra 实现 JAR 文件的文件。此外,ConfigureListener
通过 Servlet 3.0 ServletContainerInitializer
显式注册为了解决旧的 GlassFish v3 错误(注意:v3,而不是 3.0.x,因此是有史以来第一个 GF3 版本)。
存在通过.tld
自动注册的情况文件不足。众所周知的是当webapp部署到Jetty时.此问答中对此进行了详细说明:could not find Factory: javax.faces.context.FacesContextFactory .
此外,正如之前和那个详细答案中提到的,GlassFish v3 有一个错误,其中 TLD 文件被扫描得太晚,因此 JSF 无法在正确的时间执行其必要的初始化操作。然后您需要明确注册 ConfigureListener
在 webapp 的 web.xml
.
但是,如果它没有在 web.xml
中明确注册时对您有用,然后保持它。 web.xml
中的噪音更少更好。但是,如果您碰巧可能部署到对上述问题敏感的容器(因此,当您的 webapp 实际上是一个公开分发的应用程序并且您无法控制目标容器的选择时),那么您最好将其保留在“对于这种情况”那”。
更新 :当在 web.xml
中启用此条目时,Tomcat 8.x 似乎显示错误行为:这个监听器实际上会被执行两次而不是一次。结果是灾难性的:除其他外,所有 JSF 事件监听器都将被注册两次,组件库将被加载两次。这只会在运行时导致冲突。换句话说,在部署到 Tomcat 时,请确保从 web.xml
中删除此条目。 .
关于jsf - com.sun.faces.config.ConfigureListener 的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264083/