如何检测当前的 JSF 版本?

Posted

技术标签:

【中文标题】如何检测当前的 JSF 版本?【英文标题】:How to detect current JSF-Version? 【发布时间】:2012-10-19 00:18:16 【问题描述】:

我正在开发一个 jsf-webapp,现在我需要知道我使用的是什么 JSF 版本?我在哪里可以查到这个?提前致谢。

【问题讨论】:

【参考方案1】:

您是说以编程方式?你可以从Package#getImplementationVersion()获得它。

String version = FacesContext.class.getPackage().getImplementationVersion();

顺便说一句,还有getImplementationVendor()getImplementationTitle() 方法。您可能还想使用它来区分供应商(例如 MyFaces 或 Mojarra)。

或者你的意思是手动?只需查看 JSF impl JAR 文件的 /META-INF/MANIFEST.MF 文件即可。您可以使用 ZIP 工具提取 JAR 文件。这是清单文件的Implementation-Version 条目。

【讨论】:

就像注释一样,WebSphere 中包含的 MyFaces 实现(至少 8.5.0.2)似乎没有为实现版本、供应商等设置值。您可能希望在上面补充打印出为 FacesContext(和 Facelet)加载的实际 jar 的代码:System.out.println("JSF API Location: " + FacesContext.class.getProtectionDomain().getCodeSource());System.out.println("JSF Impl Location: " + Facelet.class.getProtectionDomain().getCodeSource()); 在 JSF2.2 中为我工作,但在 JSF 2.3 中返回 null 仅供记录:最近的OmniFaces 版本在实用程序类Faces 中提供了getImplInfo() 方法,它返回的正是此答案中描述的内容。这也可以通过#faces.implInfo在EL中获得。 还有 primefaces 版本?是否有可能以编程方式?【参考方案2】:

对我来说,它不适用于 WebSphere Server,所以我关注了 peater 的 comment:

System.out.println("JSF API Location: " + FacesContext.class.getProtectionDomain().getCodeSource());
System.out.println("JSF Impl Location: " + Facelet.class.getProtectionDomain().getCodeSource());

它显示了库文件名中的版本:

JSF API 位置:(文件:/C:/workspaces/spielwiese/wlp/dev/api/spec/com.ibm.websphere.javaee.jsf.2.2_1.0.18.jar)

JSF Impl 位置:(文件:/C:/workspaces/spielwiese/wlp/dev/api/spec/com.ibm.websphere.javaee.jsf.2.2_1.0.18.jar)

【讨论】:

只获取版本:FacesContext.class.getProtectionDomain().getCodeSource().toString().replaceAll("^.*faces-(\\d.*\\d).*$ ", "$1")【参考方案3】:

步骤

1:解压javax.faces.jar(解压到一个文件夹),去解压 文件夹\META-INF

2:在 META-INF 中,打开 MANIFEST.MF。

3:搜索实现版本

例如:实施版本:2.1.6-SNAPSHOT

【讨论】:

以上是关于如何检测当前的 JSF 版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取当前视图HTML源并将其作为String传递给JSF ManagedBean

如何找出我的 WebLogic 正在使用的 Mojarra 的当前版本?

从当前行数据表中获取 id 以链接 JSF Primefaces Java [重复]

在新选项卡/窗口中打开链接而不丢失当前 JSF 页面的视图范围

如何对Android的版本进行检测与更新

JSF 获取托管 bean 中的当前操作