Могу ли я бросить исключение с JSTL в пользовательском теге JSP, когда атрибут недействителен?

StackOverflow https://stackoverflow.com/questions/8845884

Вопрос

Я делаю немного тега 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})}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top