Kann ich eine Ausnahme mit JSTL in einem benutzerdefinierten JSP -Tag machen, wenn ein Attribut ungültig ist?

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

Frage

Ich mache ein JSP -Tag. Ich übergeben einen Typparameter an das Tag.

Der Code sieht so aus:

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

Ich möchte eine Ausnahme machen, wenn ich einen falschen Wert bestehe. Als ich nach diesem Thema suchte, habe ich gerade gefunden Dies. Kann ich nicht eine normale Ausnahme in JSTL auswerfen?

War es hilfreich?

Lösung

Wirf einfach das Problem sofort zu bemerken

Wer würde "bemerken"? Diese Ausnahme kann nur vom Container erfasst werden und führt zu einer Seite "500 interner Serverfehler" (oder einer benutzerdefinierten Fehlerseite, die Sie definieren).

Wenn Sie das wirklich wollen, können Sie ein benutzerdefiniertes Tag definieren, das nur "Wurf to the wasing eexception ()" durchführt und dann Ihren benutzerdefinierten Taglib wie: <mytaglib:reportError/>, Wie der Standard -Kern -Taglib nicht in Betracht gezogen hatte, eine Ausnahme zu werfen, wäre für irgendjemanden jemals wünschenswert.

Andere Tipps

Ich habe beschlossen, wiederzubeleben und zu bearbeiten Eine gelöschte Antwort die teilweise korrekt aussah.

Sie können eine Ausnahme auslegen, indem Sie sie in ein Skriptlet wie SO hinzufügen:

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

Ihre JSPs sollen jedoch Teil Ihrer "View" -Schize sein, sodass Sie wirklich versuchen sollten, Ihre Logik (einschließlich der Ausnahme) in Ihren Servlets zu halten.

Beachten Sie das if (true) Aussage. Es ist ein Trick, weil sich der Compiler über "nicht erreichbarer Code" beschwert, wenn Sie das Ausnahme -Skript in Ihren Code fallen lassen.

Ich würde nur eine benutzerdefinierte EL -Funktion oder -T -Tag verwenden, die systematisch eine Ausnahme ausgelöst oder eine große rote DIV mit der Fehlermeldung oder beides anzeigt

${myFn:illegalState("the type must be odd or even but it is " ${type})}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top