什么决定了 JSF 版本?容器还是faces-config?
Posted
技术标签:
【中文标题】什么决定了 JSF 版本?容器还是faces-config?【英文标题】:what dictates JSF version? Container or faces-config? 【发布时间】:2012-03-08 22:37:56 【问题描述】:我目前在 JBoss AS 4.3 上运行旧版 JSF 应用程序。我相信这实现了 JSF 1.2。但是,当我查看 faces-config 时,我发现它使用的是 JSF 1.1 DTD。
我使用的是哪个版本的 JSF?
【问题讨论】:
【参考方案1】:确切的 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 之类的较新版本。它要么出错,要么被忽略。
【讨论】:
以上是关于什么决定了 JSF 版本?容器还是faces-config?的主要内容,如果未能解决你的问题,请参考以下文章