Comment utiliser l'option if-else dans JSTL

Réponses:

522

Oui, mais c'est maladroit comme l'enfer, par exemple

<c:choose>
  <c:when test="${condition1}">
    ...
  </c:when>
  <c:when test="${condition2}">
    ...
  </c:when>
  <c:otherwise>
    ...
  </c:otherwise>
</c:choose>
skaffman
la source
5
Mis à part la balise wrapper (choisissez), je ne vois pas comment cela est plus détaillé que si / elseif / else le serait. Une étiquette d'emballage ne constitue guère «maladroit comme l'enfer», non?
Steven Benitez
19
@Steven: C'est sa nature XML. Il y a plus de caractères dans le passe-partout que dans la logique réelle.
skaffman
2
Ah ok. La même chose pourrait être définie pour <c:if/>alors aussi.
Steven Benitez
15
Je sais que je suis un peu en retard à la fête, mais <c:otherwise>semble un peu bavard, hein?
andronikus
6
commencer à imbriquer la logique avec une indentation appropriée et maladroite car l'enfer semblera une description trop gentille.
Adam Tolley
105

En plus avec la réponse de skaffman, si vous pouvez utiliser un opérateur ternaire comme celui-ci

<c:set value="34" var="num"/>
<c:out value="${num % 2 eq 0 ? 'even': 'odd'}"/>
laksys
la source
6
C'est une bonne réponse, mais elle est hautement situationnelle quant à son utilité.
Mike LP
47

Il n'y a pas de if-else, juste si.

<c:if test="${user.age ge 40}">
 You are over the hill.
</c:if>

En option, vous pouvez utiliser Choisir quand:

<c:choose>
  <c:when test="${a boolean expr}">
    do something
  </c:when>
  <c:when test="${another boolean expr}">
    do something else
  </c:when>
  <c:otherwise>
    do this when nothing else is true
  </c:otherwise>
</c:choose>
Menuka Ishan
la source
Salut @iwxfer, votre lien ci-dessus n'est pas disponible pour le moment, veuillez le mettre à jour, si vous le pouvez comme bon score, sinon supprimez-le.
Ajay2707
25

Je me suis contenté d'utiliser simplement deux balises if, j'ai pensé ajouter une réponse au cas où cela serait utile à quelqu'un d'autre:

<c:if test="${condition}">
  ...
</c:if>
<c:if test="${!condition}">
  ...
</c:if>

bien que techniquement pas en if-elsesoi, le comportement est le même et évite l'approche maladroite de l'utilisation de la choosebalise, donc selon la complexité de vos besoins, cela peut être préférable.

jonk
la source
1
Considérons le cas où la condition est quelque chose de compliqué et de laid comme $ {not param.age gt 42 et someOtherVar eq 'foobar'}. Vous devez stocker la condition dans une variable booléenne temporaire afin de pouvoir faire! Condition, ou écrire l'inverse de cette condition. Les deux laids. La syntaxe "sinon" est un inverse garanti.
mat brûle
3
En effet, une condition complexe nécessiterait soit une variable locale, soit l'écriture de l'inverse, mais ces deux options fonctionneraient toujours. J'ai précisé que cela dépendrait de la complexité de l'exigence quant à savoir si cette approche serait préférable à l' chooseétiquette.
jonk
2
Je suis d'accord avec ça. Si vous n'en avez qu'une seule, sa marge est moins importante que celle de c: choose
javaMoca
1
Il y a un autre avantage supplémentaire à avoir <c: if test = "$ {condition} == true"> et <c: if test = "$ {condition == false}">. Lorsque la variable est nulle (non initialisée), aucune branche n'est exécutée, ce qui est bien. Si vous choisissez <c: choose> et <c: when>, la fausse branche sera exécutée lorsque la variable est nulle.
Steve Stilson
3

vous devez utiliser ce code:

avec <%@ taglib prefix="c" uri="http://www.springframework.org/tags/form"%>

et

<c:select>
            <option value="RCV"
                ${records[0].getDirection() == 'RCV' ? 'selected="true"' : ''}>
                <spring:message code="dropdown.Incoming" text="dropdown.Incoming" />
            </option>
            <option value="SND"
                ${records[0].getDirection() == 'SND'? 'selected="true"' : ''}>
                <spring:message code="dropdown.Outgoing" text="dropdown.Outgoing" />
            </option>
        </c:select>
ankit
la source
-1

Il s'agit d'une approche bonne et efficace selon la perspective de complexité temporelle. Une fois qu'il obtiendra un vrai état, il n'en vérifiera aucun autre après cela. Dans plusieurs If, il vérifiera chaque condition.

   <c:choose>
      <c:when test="${condtion1}">
        do something condtion1
      </c:when>
      <c:when test="${condtion2}">
        do something condtion2
      </c:when>
      ......
      ......
      ...... 
      .......

      <c:when test="${condtionN}">
        do something condtionn N
      </c:when>


      <c:otherwise>
        do this w
      </c:otherwise>
    </c:choose>
Sachin Kumar
la source