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.
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'}" />
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>