Come utilizzare l'opzione if-else in JSTL


Risposte:


522

Sì, ma è ingombrante da morire, ad es

<c:choose>
  <c:when test="${condition1}">
    ...
  </c:when>
  <c:when test="${condition2}">
    ...
  </c:when>
  <c:otherwise>
    ...
  </c:otherwise>
</c:choose>

5
A parte il tag wrapper (scegli), non vedo come sia più prolisso di quanto sarebbe se / elseif / else. Un tag wrapper difficilmente costituisce "goffo come l'inferno", no?
Steven Benitez,

19
@Steven: è la sua natura XML. Ci sono più personaggi nella piastra di caldaia di quanti ce ne siano nella logica attuale.
Skaffman,

2
Ah ok. Lo stesso potrebbe essere impostato anche per <c:if/>allora.
Steven Benitez,

15
So di essere un po 'in ritardo alla festa, ma <c:otherwise>sembra un po' prolisso, eh?
andronikus,

6
inizia a nidificare la logica con il rientro appropriato e goffa come l'inferno sembrerà una descrizione troppo gentile.
Adam Tolley,

105

Oltre alla risposta skaffman, if-else semplice è possibile utilizzare l'operatore ternario in questo modo

<c:set value="34" var="num"/>
<c:out value="${num % 2 eq 0 ? 'even': 'odd'}"/>

6
Questa è una buona risposta, ma è altamente situazionale per quanto sarebbe utile.
Mike LP,

47

Non c'è if-else, solo se.

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

Opzionalmente puoi usare scegli quando:

<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>

Ciao @iwxfer, il tuo link sopra non è disponibile in questo momento, ti preghiamo di aggiornare, se puoi come buon punteggio, altri saggi rimuoverlo.
Ajay2707,

25

Sono riuscito a usare semplicemente due tag if, ho pensato di aggiungere una risposta nel caso in cui fosse utile a chiunque altro:

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

sebbene tecnicamente non sia di if-elseper sé, il comportamento è lo stesso ed evita l'approccio goffo dell'uso del choosetag, quindi a seconda di quanto sia complesso il tuo requisito potrebbe essere preferibile.


1
Considera il caso in cui la condizione è qualcosa di complicato e brutto come $ {not param.age gt 42 e someOtherVar eq 'foobar'}. Dovresti archiviare la condizione in una variabile booleana temporanea in modo da poter fare! Condizione o scrivere l'inverso di quella condizione. Entrambi brutti. La sintassi "altrimenti" è un inverso garantito.
Matt Burns,

3
In effetti una condizione complessa richiederebbe una variabile locale o la scrittura inversa, ma entrambe le opzioni funzionerebbero comunque. Ho chiarito che dipenderà da quanto sia complesso il requisito se questo approccio sarebbe preferibile rispetto al choosetag.
Jon

2
Sono d'accordo con questo. Se hai solo un altro, è meno markeup quindi usa c: scegli
javaMoca

1
C'è un ulteriore vantaggio di avere <c: if test = "$ {condition} == true"> e <c: if test = "$ {condition == false}">. Quando la variabile è nulla (non inizializzata), nessuno dei rami viene eseguito, il che è positivo. Se vai con <c: scegli> e <c: quando>, il ramo falso verrà eseguito quando la variabile è nulla.
Steve Stilson,

3

devi usare questo codice:

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

e

<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>

-1

Questo è un approccio valido ed efficiente per quanto riguarda la prospettiva della complessità temporale. Una volta che avrà una vera condizione, non controllerà nessun altro dopo questo. In più If, controllerà ciascuno e le condizioni.

   <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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.