gpt4 book ai didi

javascript - 如何在加载 View 之前检查 JSF 资源是否存在

转载 作者:数据小太阳 更新时间:2023-10-29 05:08:00 27 4
gpt4 key购买 nike

在使用 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 .它将返回 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}" />

另见:


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

关于javascript - 如何在加载 View 之前检查 JSF 资源是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20196581/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com