16

假设requestScope.importMe需要一个 JSP 文件的路径

<c:choose>
    <c:when test="${!empty requestScope.importMe && fileExists(requestScope.importMe) }">
    <c:import url="${requestScope.importMe}" />   
    ...
</c:choose>

如何在尝试包含文件之前检查文件是否存在,以免引发错误?

我更喜欢使用 JSTL 标签的解决方案。

4

2 回答 2

22

把它放在一个c:catch标签里。它会为你捕捉任何抛出Exception的东西。

<c:catch var="e">
    <c:import url="${url}" />
</c:catch>
<c:if test="${!empty e}">
    Error: ${e.message}
</c:if>

但是我必须承认我不喜欢这种c:catch方法。它滥用异常来控制流程。如果可以,宁愿在 servlet 或JavaBeanFile#exists()中完成这项工作,而不是在(and ServletContext#getRealPath())的帮助下。

于 2010-04-12T21:23:02.063 回答
4

@BalusC 非常聪明,可能会回答这个问题。

但是,要完整地说,标准 JSTL 中的任何内容都不能满足您的要求,但您当然可以创建自己的 EL 函数来进行检查。显然,您需要为它编写 Java,但它不是内联在您的 JSP 中。

J2EE 1.4 教程有一节介绍如何创建您自己的 EL 函数。

于 2010-04-12T21:48:13.560 回答