如何在加载视图之前检查JSF资源是否存在
How to check if JSF resource exists before loading view
在一个使用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资源?
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 如何通过ajax刷新JSF填充的javascript变量
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 如何检查管道中未定义的项目
- 主干-不管怎样,检查事件以前是否绑定过
- 使用javascript检查多个输入值,并在1次检查中标记多个输入框
- 递归使用 eval() 是检查程序执行的好方法吗?
- 当我点击jsf中的primefaces命令按钮时,如何获得点击事件
- 检查onsubmit doenst work jquery contactform上的函数
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- API密钥使用和检查示例
- 如何让程序检查所选单词中是否有按键
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 用于检查数组中是否存在元素的javascript自定义方法
- 如何检查字符串的一部分与数组匹配
- Jquery如何检查今天的时间大于使用给定时间
- 使用javascript反复检查用户在facebook上的登录状态
- 使用 jQuery 检查所有值是否为空或已填充
- 如何在加载视图之前检查JSF资源是否存在
- 在JSF+PrimeFaces中重置表单之前,请检查是否输入了一些强制输入字段