Могу ли я выбросить исключение с JSTL в пользовательский тег JSP, когда атрибут недействителен? - PullRequest
3 голосов
/ 13 января 2012

Я делаю тег 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?

Ответы [ 3 ]

2 голосов
/ 29 сентября 2016

Я решил восстановить и отредактировать удаленный ответ , который выглядел частично корректно.

Вы можете выдать исключение, добавив его в скриптлет следующим образом:

<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>

Тем не менее, ваши jsps должны быть частью вашего слоя «view», поэтому вам следует постараться сохранить свою логику (включая создание исключения) в ваших сервлетах.

Примечаниеif (true) заявление.Это хитрость, потому что компилятор будет жаловаться на «недоступный код», если вы просто поместите скриптлет исключения в ваш код.

1 голос
/ 22 января 2012

Я бы просто использовал пользовательскую функцию EL или тег, который систематически выдает исключение, или отображает большой красный div с сообщением об ошибке, или оба

${myFn:illegalState("the type must be odd or even but it is " ${type})}
1 голос
/ 22 января 2012

Просто бросьте, чтобы сразу заметить проблему

Кто бы "заметил"?Это исключение может быть перехвачено только контейнером, и оно приведет к некоторой странице «500 Internal Server Error» (или определенной вами странице пользовательской ошибки).

Если это то, что вы действительно хотите, вы можете определить пользовательскийтег, который будет просто выполнять «throw new WheverException ()», а затем использовать ваш пользовательский taglib, такой как: <mytaglib:reportError/>, так как стандартный основной taglib не учитывает создание исключения, когда-либо будет желательным для всех.

...