¿Puedo lanzar una excepción con JSTL en una etiqueta JSP personalizada cuando un atributo no es válido?

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

Pregunta

Estoy haciendo una etiqueta JSP. Paso un parámetro de tipo a la etiqueta.

El código se ve así:

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

Quiero lanzar una excepción si paso un valor incorrecto. Cuando busqué sobre este tema, acabo de encontrar este. ¿No puedo lanzar una excepción normal en JSTL?

¿Fue útil?

Solución

Simplemente tire para notar el problema de inmediato

¿Quién "notaría"? Esa excepción solo puede ser atrapada por el contenedor y dará como resultado una página de "Error del servidor interno 500" (o una página de error personalizada que define).

Si eso es lo que realmente quieres, puedes definir una etiqueta personalizada que solo realizará "Throw New WhicheException ()" y luego utilizará tu Taglib personalizado como: <mytaglib:reportError/>, ya que el núcleo estándar que Taglib no consideraba que arrojar una excepción sería deseable para nadie.

Otros consejos

He decidido revivir y editar Una respuesta eliminada que parecía parcialmente correcto.

Puede lanzar una excepción agregándola en un scriptlet como así:

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

Sin embargo, se supone que sus JSP son parte de su capa de "vista", por lo que realmente debe intentar mantener su lógica (incluida la excepción) en sus servlets.

Nota la if (true) declaración. Es un truco porque el compilador se quejará del "código inalcanzable" si simplemente deja caer el script de excepción en su código.

Simplemente usaría una función o etiqueta de EL personalizada que lanza sistemáticamente una excepción, o muestra un gran div rojo con el mensaje de error, o ambos

${myFn:illegalState("the type must be odd or even but it is " ${type})}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top