web-dev-qa-db-fra.com

Syntaxe correcte pour comparer les valeurs dans JSTL <c: if test = "$ {values.type} == 'object'">>

J'ai une instruction if que j'essaie d'exécuter avec JSTL.

Mon code est ci-dessous (les valeurs des variables sont une ArrayList qui contient un objet défini par l'utilisateur et le type est une propriété privée de cet objet, avec des méthodes getter/setter publiques):

<c:forEach items="${list}" var="values">
    <c:if test="${values.type}=='object'">
        <!-- code here -->
    </c:if>
</c:forEeach>

Quelle serait la syntaxe correcte de la partie dans l'attribut test. Les documents n'aident pas vraiment avec cette partie http://download.Oracle.com/javaee/5/jstl/1.1/docs/tlddocs/index.html

Merci.

17
Ankur

La comparaison doit être évaluée entièrement à l'intérieur d'EL ${ ... }, Pas à l'extérieur.

<c:if test="${values.type eq 'object'}">

En ce qui concerne les documents, ces ${} Choses ne sont pas JSTL, mais EL (Expression Language) qui est un sujet à part entière. JSTL (comme tous les autres taglibs JSP) ne fait que l'utiliser. Vous pouvez trouver d'autres exemples EL ici .

<c:if test="#{bean.booleanValue}" />
<c:if test="#{bean.intValue gt 10}" />
<c:if test="#{bean.objectValue eq null}" />
<c:if test="#{bean.stringValue ne 'someValue'}" />
<c:if test="#{not empty bean.collectionValue}" />
<c:if test="#{not bean.booleanValue and bean.intValue ne 0}" />
<c:if test="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />

Voir également:


Soit dit en passant, sans rapport avec le problème concret, si je suppose que votre intention est juste, vous pouvez aussi simplement appeler Object#getClass() puis Class#getSimpleName() au lieu d'ajouter un getter personnalisé.

<c:forEach items="${list}" var="value">
    <c:if test="${value['class'].simpleName eq 'Object'}">
        <!-- code here -->
    </c:if>
</c:forEeach>

Voir également:

43
BalusC