listar formulario ejemplos java jsp jstl

java - formulario - jstl maven



atributo de prueba en la etiqueta JSTL<c: if> (5)

<% =%> por sí solo se enviará a la salida, en el contexto del JSTL se evaluará a una cadena

Vi un código como el siguiente en un JSP

<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>"> <li>user</li> </c:if>

Mi confusión es sobre el "=" que aparece en el valor del atributo de test . Según entiendo, todo lo que se incluye dentro de <%= %> se imprime en la salida, pero seguramente el valor asignado para la prueba debe ser booleano, entonces, ¿por qué funciona esto?

Para puntos de bonificación, ¿hay alguna forma de cambiar el valor de atributo anterior para que no use el código scriptlet? Presumiblemente, eso significa usar EL en su lugar.

Saludos, Don


La expresión entre <% =%> se evalúa antes de que se evalúe la etiqueta c: if. Entonces, supongamos que | request.isUserInRole | returns | true |, su ejemplo sería evaluado a este primero:

<c:if test="true"> <li>user</li> </c:if>

y luego la etiqueta c: if se ejecutará.


Los atributos en las bibliotecas de etiquetas JSP en general pueden ser estáticos o resueltos en el momento de la solicitud. Si se resuelven en el momento de la solicitud, el JSP resolverá su valor en tiempo de ejecución y pasará la salida a la etiqueta. Esto significa que puede poner prácticamente cualquier código JSP en el atributo y la etiqueta se comportará de acuerdo con la salida que produzca.

Si nos fijamos en los documentos jstl taglib, puede ver qué atributos son de tiempo de publicación y cuáles no. http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html


Todo lo que el atributo de test busca para determinar si algo es verdadero es la cadena "verdadera" (caso no sensible). Por ejemplo, el siguiente código imprimirá "Hello world!"

<c:if test="true">Hello world!</c:if>

El código dentro de <%= %> devuelve un booleano, por lo que imprimirá la cadena "verdadero" o "falso", que es exactamente lo que busca la etiqueta <c:if> .


También puedes usar algo como

<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>