Posso lanciare un'eccezione con JSTL in un tag JSP personalizzato quando un attributo non è valido?

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

Domanda

Sto facendo un tag JSP. Passo un parametro di tipo al tag.

Il codice sembra questo:

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

Voglio lanciare un'eccezione se passo un valore sbagliato. Quando ho cercato su questo argomento ho appena trovato questo. Non posso lanciare una normale eccezione in JSTL?

È stato utile?

Soluzione

Basta lanciare per notare il problema immediatamente

Chi noterebbe "notare"? Tale eccezione può essere catturata solo dal contenitore e si tradurrà in una pagina "Errore del server interno" 500 "o una pagina di errore personalizzata che definisce).

Se questo è quello che vuoi veramente, puoi definire un tag personalizzato che eseguirà semplicemente "Throw New qualunque Exception ()", quindi utilizza il tuo taglib personalizzato come: <mytaglib:reportError/>, poiché il core standard Taglib non ha preso in considerazione l'idea di lanciare un'eccezione sarebbe mai desiderabile per nessuno.

Altri suggerimenti

Ho deciso di rilanciare e modificare una risposta cancellata che sembrava parzialmente corretto.

Puoi lanciare un'eccezione aggiungendola in una sceneggiatura come così:

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

Tuttavia, i tuoi JSP dovrebbero far parte del tuo livello "vista", quindi dovresti davvero provare a mantenere la tua logica (incluso il lancio dell'eccezione) nei tuoi servizi.

Notare la if (true) dichiarazione. È un trucco perché il compilatore si lamenterà del "codice irraggiungibile" se si lascia semplicemente cadere la scriptlet di eccezione nel tuo codice.

Userei solo una funzione o tag personalizzata che lancia sistematicamente un'eccezione o visualizza un grande div rosso con il messaggio di errore o entrambi

${myFn:illegalState("the type must be odd or even but it is " ${type})}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top