繁体   English   中英

如何防止JSF自动初始化?

[英]How to prevent JSF from initializing automatically?

当我从头开始创建Web应用程序并将jsf-api-2.2.11.jar和jsf-impl-2.2.11.jar添加到pom.xml(将它们添加到应用程序类路径中)并将其部署到Tomcat 7时,JSf正在初始化自动:

INFO [j.e.r.w.j.config] - Mojarra 2.2.11 ( 20150505-0732 https://svn.java.net/svn/mojarra~svn/tags/2.2.11@14688) ..... initialized.

在旧版本中,我曾经通过在web.xml(listener + servlet)中进行定义来声明地启动它。 因此,我已经将它们注释掉,并将“元数据完成”设置为“ true”(这是否甚至停止了类路径扫描?),但是它仍在加载。

在这种情况下,我不想加载它,而将Jars保留在classpath中,即将faces-config.xml保留在web-inf中。

什么仍然触发初始化?

它是通过JSF实现JAR文件中的Servlet 3.0 ServletContainerInitializer实现加载的(对于Mojarra,它是com.sun.faces.config.FacesInitializer )。 它将在URL模式*.jsf*.faces/faces/*上自动注册FacesServlet (JSF 2.3会将*.xhtml添加到URL模式列表中)。 最新的JSF 2.1实现和所有JSF 2.2实现将在部署到Servlet 3.0兼容容器中时实现。 有关这个新的Servlet 3.0 ServletContainerInitializer的详细信息,请转到此答案: ServletContainerInitializer与ServletContextListener

停止它的正确方法是从依赖项中删除JSF实现(请注意,您也不需要删除JSF API)。 您似乎没有以任何方式使用它。 毕竟,正确设计的Web应用程序不应具有任何JSF实现特定的依赖关系。 我只想知道,为什么还要保留JSF API? 将基于第三方JSF的库用于非JSF用途? 这可能表明并最终导致其他(建筑)问题。

阻止它的另一种方法是通过相应地编辑web.xml<web-app>根声明来将您的Web应用程序降级为Servlet 2.5。 但是,这还有许多其他副作用,如果要开发与Servlet 3.0兼容的Web应用程序,这可能是不希望的。


实际上,您所指的“侦听器”不是必需的,仅用于解决在解析TLD文件(例如早期的GlassFish v3和Jetty版本)中出现时间错误的有问题的容器。 另请参阅com.sun.faces.config.ConfigureListener的配置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM