2010-04-12 3 views
16

Предполагая, что requestScope.importMe ожидает путь к файлу JSPКак вы можете проверить, существует ли файл, прежде чем включать/импортировать его в JSP?

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

Как я могу проверить, существует ли файл, прежде чем пытаться включить его так, что ошибка не бросили?

Я бы предпочел решение с использованием тегов JSTL.

ответ

21

Положите его в тег 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 подход. Это злоупотребление исключениями для контроля потока. Если вы можете, скорее сделайте эту работу в сервлете или JavaBean вместо этого с помощью File#exists()ServletContext#getRealPath()).

+0

Hi @BalusC! Я также ищу реализацию, подобную той, которая приведена в вашем ответе. Я просматриваю сообщения SO, но я думаю, что ваш ответ - самый простой способ реализовать мои потребности, и я не уверен, чтобы снова задать вопрос о чем-то уже заданном. Мне нужно импортировать в jstl динамический url: я пытаюсь загрузить URL-адрес определенного региона (например: ./3/myJspx.jspx, и в случае, если файл не найден, он отбрасывает область по умолчанию jspx: ./myJspx .jspx .. Учитывая, что много времени прошло по вашему ответу, между тем, вы пришли к какому-либо другому решению или получили какой-либо другой намек? – gipinani

4

@BalusC довольно умный и, вероятно, отвечает на вопрос.

Однако, чтобы быть полным, ничто в стандартном JSTL не будет делать то, что вы хотите, но вы можете создать свои собственные функции EL, которые вы можете использовать для проверки. Очевидно, вам нужно написать Java для него, но это не встроено в ваши JSP.

Учебник J2EE 1.4 содержит section о создании собственных функций EL.

+0

Подробности о создании собственной Java объясняются в этом вопросе stackOverflow ... http: //stackoverflow.com/questions/16788790/include-css-file-in-jsp-only-if-it-exist –

+0

@WillHartung: ссылка раздела выше больше не сводится к разделу, о котором вы говорили (я думаю) Можете ли вы включить основную часть ответа в вопрос, если он не слишком большой, или исправить ссылку? – yochannah

Смежные вопросы