atributo de prueba en la etiqueta JSTL <c:if>
Pregunta
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 por el "=" que aparece en el valor del test
atributo.Entendí que cualquier cosa incluida dentro <%= %>
se imprime en la salida, pero seguramente el valor asignado a la prueba debe ser booleano, entonces, ¿por qué funciona esto?
Para obtener puntos de bonificación, ¿hay alguna forma de cambiar el valor del atributo anterior de modo que no utilice código scriptlet?Presumiblemente, eso significa usar EL en su lugar.
Saludos, Don
Solución
Todo lo que el test
El atributo que busca para determinar si algo es verdadero es la cadena "verdadero" (no distingue entre mayúsculas y minúsculas).Por ejemplo, el siguiente código imprimirá "¡Hola mundo!"
<c:if test="true">Hello world!</c:if>
El código dentro del <%= %>
devuelve un valor booleano, por lo que imprimirá la cadena "verdadero" o "falso", que es exactamente lo que <c:if>
etiqueta busca.
Otros consejos
También puedes usar algo como
<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>
La expresión entre <%= %> se evalúa antes de que se evalúe la etiqueta c:if.Entonces, suponiendo que | request.isuserinrole | devuelve | verdadero |, su ejemplo se evaluaría a esto primero:
<c:if test="true">
<li>user</li>
</c:if>
y luego se ejecutaría la etiqueta c:if.
Los atributos de las bibliotecas de etiquetas JSP en general pueden ser estáticos o resolverse en el momento de la solicitud.Si se resuelven en el momento de la solicitud, JSP resolverá su valor en tiempo de ejecución y pasará el resultado 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 el resultado que produzca.
Si observa los documentos jstl taglib, puede ver qué atributos son los más solicitados y cuáles no. http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html
<%=%> por sí solo se enviará a la salida, en el contexto del JSTL se evaluará como una cadena