簡體   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