Question

J'ai vu du code comme celui-ci dans un JSP

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

Ma confusion règne sur le " = " qui apparaît dans la valeur de l'attribut test . D'après ce que j'avais compris, tout ce qui est inclus dans <% =% > est imprimé dans la sortie, mais la valeur affectée au test doit sûrement être un booléen, alors pourquoi cela fonctionne-t-il?

Pour les points bonus, existe-t-il un moyen de modifier la valeur d'attribut ci-dessus de manière à ce qu'il n'utilise pas de code de scriptlet? Vraisemblablement, cela signifie utiliser EL à la place.

Salut, Don

Était-ce utile?

La solution

Tout ce que l'attribut test recherche pour déterminer si quelque chose est vrai est la chaîne " true " (cas insensible). Par exemple, le code suivant affichera "Bonjour le monde!"

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

Le code contenu dans le <% =% > renvoie un booléen. Il imprimera donc la chaîne " true " ou "faux", qui correspond exactement à ce que recherche la balise < c: if > .

Autres conseils

Vous pouvez également utiliser quelque chose comme

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

L'expression entre les <% =% > est évalué avant que la balise c: if soit évaluée. Donc, en supposant que | request.isUserInRole | renvoie | true |, votre exemple serait évalué comme suit:

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

puis la balise c: if serait exécutée.

En règle générale, les attributs des bibliothèques de balises JSP peuvent être statiques ou résolus au moment de la demande. S'ils sont résolus au moment de la demande, le JSP résoudra leur valeur au moment de l'exécution et transmettra la sortie à la balise. Cela signifie que vous pouvez insérer à peu près n'importe quel code JSP dans l'attribut et que la balise se comportera en fonction de la sortie générée.

Si vous examinez la documentation de la balise jstl, vous pouvez voir quels attributs correspondent au moment de la réutilisation et ceux qui ne le sont pas. http://java.sun.com/products/ jsp / jstl / 1.1 / docs / tlddocs / index.html

<% =% > par lui-même sera envoyé à la sortie, dans le contexte du JSTL, il sera évalué à une chaîne

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top