什么决定了 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?的主要内容,如果未能解决你的问题,请参考以下文章

JSF、CDI 和 EJB 容器:应该使用它们的哪种组合?

调试 JSF 生命周期——每个阶段到底发生了啥

jsf+primefaces开发配置

azure App 服务部署为代码还是容器?

JSF(容器管理安全)组角色

JSF(容器管理安全)组角色