Могу ли я бросить исключение с JSTL в пользовательском теге JSP, когда атрибут недействителен?
-
27-10-2019 - |
Вопрос
Я делаю немного тега JSP. Я передаю параметр типа в тег.
Код выглядит так:
<%@ attribute name="type" require="true" %>
<c:choose>
<c:when test="${type eq 'even'}">
<c:set var="remainder" value="0" />
</c:when>
<c:when test="${type eq 'odd'}">
<c:set var="remainder" value="1" />
</c:when>
<c:otherwise>
<%-- Want to throw exception!! --%>
</c:otherwise>
</c:choose>
Я хочу сделать исключение, если я передам неверную ценность. Когда я искал эту тему, я только что нашел это. Анкет Разве я не могу сделать нормальное исключение в JSTL?
Решение
Просто брось, чтобы немедленно заметить проблему
Кто бы «заметил»? Это исключение может быть поймано только контейнером, и это приведет к какой -то странице «500 внутренней ошибки сервера» (или на какой -то пользовательской странице ошибок, которую вы определяете).
Если это то, что вы действительно хотите, вы можете определить пользовательский тег, который просто выполнит «НОВЫЙ AwayException ()», а затем использовать свой пользовательский таглиб, как: <mytaglib:reportError/>
, поскольку стандартный основной тагал не считал, что бросить исключение когда -либо было бы желательным для кого -либо.
Другие советы
Я решил оживить и редактировать Удаленный ответ который выглядел частично правильно.
Вы можете сделать исключение, добавив его в скриплет, как SO:
<c:choose> <c:when test="${type eq 'even'}"> <c:set var="remainder" value="0" /> </c:when> <c:when test="${type eq 'odd'}"> <c:set var="remainder" value="1" /> </c:when> <c:otherwise> <% if (true) throw new Exception("Wrong type"); %> </c:otherwise> </c:choose>
Тем не менее, ваши JSP должны быть частью вашего слоя «представления», поэтому вы должны действительно попытаться сохранить свою логику (включая исключение) в своих сервлетах.
Обратите внимание if (true)
утверждение. Это трюк, потому что компилятор будет жаловаться на «недоступный код», если вы просто бросите скриплет исключения в свой код.
Я бы просто использовал пользовательскую функцию EL или тег, которая систематически бросает исключение или отображает большой красный Div с сообщением об ошибке или обоих
${myFn:illegalState("the type must be odd or even but it is " ${type})}