Предположение, что requestScope.importMe ожидает путь к файлу JSP
<c:choose>
<c:when test="${!empty requestScope.importMe && fileExists(requestScope.importMe) }">
<c:import url="${requestScope.importMe}" />
...
</c:choose>
Как я могу проверить, существует ли файл прежде, чем попытаться включать его так, чтобы ошибка не была брошена?
Я предпочел бы решение с помощью тегов JSTL.
Поместите его в тег c: catch
. Он перехватит любое выброшенное исключение
за вас.
<c:catch var="e">
<c:import url="${url}" />
</c:catch>
<c:if test="${!empty e}">
Error: ${e.message}
</c:if>
Однако я должен признать, что мне не нравится подход c: catch
. Это злоупотребление исключениями для управления потоком. Если можете, лучше выполняйте эту работу в сервлете или JavaBean вместо File # exists ()
(и ServletContext # getRealPath ()
).
@BalusC довольно умен и, вероятно, отвечает на вопрос.
Однако, чтобы быть полным, в стандартном JSTL ничего не будет делать то, что вы хотите, но вы, безусловно, можете создать свои собственные функции EL, которые вы можете использовать для выполнения проверки. Очевидно, вам нужно будет написать для него Java, но он не встроен в ваши JSP.
В руководстве по J2EE 1.4 есть раздел , посвященный созданию ваших собственных функций EL.