Как правильно ловить исключение в JSTL? - PullRequest
1 голос
/ 24 января 2012

В некотором устаревшем коде, который у нас был, у нас был процесс, который захватывал наши «базовые» файлы JSP и прикреплял заголовок, нижний колонтитул и т. Д. И все остальное, что мы хотели, ко всем файлам JSP во всем приложении. Одна вещь, которую этот процесс добавил ко всем JSP, был блок try-catch вокруг всего JSP в скриптлетах. Итак, в конце концов, все наши JSP будут выглядеть примерно так:

<%
try
{
%>
.... all the rest of the JSP .....
<%
}
catch(Exception e)
{
    Log.error(e);
}
%>

Мы недавно избавились от этого процесса и перенесли наши JSP на использование JSTL и не имели никаких скриптлетов. Мы создали тег, который мы в основном обертываем вокруг каждого JSP, делаем заголовок, нижний колонтитул и т. Д. Итак, теперь наши JSP выглядят примерно так:

<foo:page>
.... all the rest of the JSP .....
</foo:page>

При этом переключении мы потеряли возможность перехватывать любые исключения, возникающие при загрузке страницы. Я немного осмотрелся и нашел тег <c:catch>. Я пытался вставить это в наш тег страницы, но я не могу заставить его работать так, как мы хотим. Я обнаружил, что если поместить тег <c:catch> рядом с тегом <jsp:doBody/> в теге страницы, он поймает исключение, и я смогу что-то с ним сделать. Однако, это не поймает никаких исключений, которые выбрасываются в других частях этого тега внешней страницы В идеале я бы заключил весь наш тег страницы в тег <c:catch>, но когда я это сделал, он, похоже, не уловил исключения. Страница просто перестает отображаться в тот момент, когда сгенерировано исключение.

У меня такой же

<c:if test="${!(empty pageException)}">
    ERROR!
</c:if>

после тега <c:catch> в обоих случаях, но на самом деле я вижу только "ОШИБКА!" в источнике, когда тег <c:catch> находится сразу вокруг <jsp:doBody/>

Любая информация об этом будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Вы можете использовать атрибут errorPage в директиве <%@ page %> вместо переноса блока try catch или <c:catch></c:catch> блоков.

1.Создать страницу JSP с одной ошибкой, которая обрабатывает ошибки, возникающие на всех других страницах JSP в приложении. Чтобы указать страницу JSP в качестве страницы errorHandler, используйте следующую директиву страницы JSP:

<%@ page isErrorPage="true" %>`

На странице JSP errorHandler используйте неявный объект exception для получения сведений об исключении.

2. Включите страницу JSP errorHandler в другие страницы JSP, используя эту директиву JSP, чтобы указать, что если на текущей странице возникают исключения, перенаправьте запрос в errorHandler.jsp:

<%@ page errorPage="/errorHandler.jsp" %>

1 голос
/ 26 марта 2013

<c:catch> должно работать.В качестве резервной копии вы можете создать класс <foo:page> TryCatchFinally и обработать исключение там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...