javascript – 如何在加载视图之前检查JSF资源是否存在

前端之家收集整理的这篇文章主要介绍了javascript – 如何在加载视图之前检查JSF资源是否存在前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在使用JSF的项目中,我们有 JavaScript文件位于:
MyProject/view/javascript/*.js

在xhtml文件中,我将这些资源包括在内

<script type="text/javascript" src="javascript/#{myBean.jsFileName}.js" />

这很好,但是#{myBean.jsFileName} .js可能不存在,在这种情况下我想加载“Default.js”.

在myBean(或xhtml文件本身)中,如何在设置#{myBean.jsFileName}值之前首先检查js文件是否存在?我尝试过这种变化:

File f = new File("javascript/myFile.js");
if (!f.exists){ jsFileName="Default"};

但我不认为这是对的.我是在正确的轨道上吗?

解决方法

您可以使用 ExternalContext#getResource()获取Web资源作为URL.如果资源不存在,它将返回null.它需要一个相对于Web根目录的路径,最好始终以/开头.

所以.这应该在bean中做:

String fullPath = "/view/javascript/myFile.js";
URL resource = FacesContext.getCurrentInstance().getExternalContext().getResource(fullPath);
if (resource == null) { 
    fullPath = "/view/javascript/default.js";
}

或者,等效地,在视图中,这是IMO有点hacky:

<c:set var="available" value="#{not empty facesContext.externalContext.getResource(bean.fullPath)}" />
<script src="#{available ? bean.fullPath : bean.fullDefaultPath}" />

也可以看看:

> getResourceAsStream() vs FileInputStream

与具体问题无关,如果您使用的是JSF 2.x(至少是Facelets,因为能够在代码片段中的模板文本中使用统一的EL意味着),您应该使用带有< h:outputScript>的资源库. .另见How to reference CSS / JS / image resource in Facelets template?

原文链接:https://www.f2er.com/js/151209.html

猜你在找的JavaScript相关文章