如何检测当前的 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 [重复]