在一个使用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()
以URL
的形式获取web资源。如果资源不存在,它将返回null
。它采用相对于web根的路径,并且最好总是以/
开始。
所以。这应该在bean中完成:
String fullPath = "/view/javascript/myFile.js";
URL resource = FacesContext.getCurrentInstance().getExternalContext().getResource(fullPath);
if (resource == null) {
fullPath = "/view/javascript/default.js";
}
或者,等效地,在国际海事组织看来,这有点棘手:
<c:set var="available" value="#{not empty facesContext.externalContext.getResource(bean.fullPath)}" />
<script src="#{available ? bean.fullPath : bean.fullDefaultPath}" />
另请参阅:
- getResourceAsStream()与FileInputStream
与具体问题无关如果您使用的是JSF 2.x(至少是Facelets,这意味着您可以在代码片段的模板文本中使用统一EL),那么您应该使用带有<h:outputScript>
的资源库。另请参阅如何在Facelets模板中引用CSS/JS/image资源?