我目前在JBoss AS 4.3上運行一個傳統的JSF應用程序。我相信這實現了JSF 1.2。但是,當我查看faces-config時,發現它使用的是JSF 1.1 DTD。什麼決定了JSF版本?容器或faces-config?
我正在使用哪個版本的JSF?
我目前在JBoss AS 4.3上運行一個傳統的JSF應用程序。我相信這實現了JSF 1.2。但是,當我查看faces-config時,發現它使用的是JSF 1.1 DTD。什麼決定了JSF版本?容器或faces-config?
我正在使用哪個版本的JSF?
確切的JSF實現版本信息可在JSF實現JAR文件的/META-INF/MANIFEST.MF
文件中獲得。它通常位於清單文件底部附近,如下所示:
Implementation-Title: Mojarra
Implementation-Version: 1.2_12-b01-FCS
Implementation-Vendor: Sun Microsystems, Inc.
可以使用ZIP工具打開JAR文件。在Sun RI/Mojarra的情況下,文件名是jsf-impl.jar
,有時候已經加了後綴,如jsf-impl-1.2_12-b01-FCS.jar
。如果您使用的是JBoss 4.3.x提供的JSF實現,那麼您可以在$JBOSS_HOME/server/<Profile>/deploy/jboss-web.deployer/jsf-libs
文件夾中找到該文件。如果您在/WEB-INF/lib
中提供了自己的JSF實現並配置了web.xml
以告訴JBoss使用它,那麼您需要在/WEB-INF/lib
中提供的實例中檢查它。
或者,你可以得到它的編程方式:
Package jsfPackage = FacesContext.class.getPackage();
String implTitle = jsfPackage.getImplementationTitle();
String implVersion = jsfPackage.getImplementationVersion();
String implVendor = jsfPackage.getImplementationVendor();
至於faces-config.xml
,有了它,你也可以控制JSF版本的應用程序是專爲。因此,如果您聲明它符合JSF 1.1規範,那麼即使JSF 1.2/2.0實現也會以JSF 1.1「兼容性模式」運行。但是當你使用JSF 1.1實現的實際上是時,你不能聲明它符合像JSF 1.2/2.0這樣的新版本。它會出錯或被忽略。