Jak korzystać z opcji if-else w JSTL


Odpowiedzi:


521

Tak, ale jest niezgrabny jak diabli, np

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

5
Oprócz tagu opakowania (wybierz), nie widzę, że jest to bardziej szczegółowe, niż gdyby / elseif / else byłoby. Jeden tag opakowania prawie nie stanowi „niezgrabnego jak diabli”, prawda?
Steven Benitez

19
@Steven: To jest XML. Na płycie kotła jest więcej znaków niż w rzeczywistej logice.
skaffman

2
Ach, okej To samo można również ustawić na ten <c:if/>czas.
Steven Benitez

15
Wiem, że jestem trochę spóźniony na imprezę, ale <c:otherwise>wydaje się trochę gadatliwy, co?
andronikus

6
zacznij zagnieżdżać logikę z odpowiednim wcięciem i niezgrabne, ponieważ piekło będzie wydawało się zbyt miłym opisem.
Adam Tolley,

105

Oprócz odpowiedzi skaffmana, prosty jeśli-możesz użyć trójskładnikowego operatora w ten sposób

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

6
To dobra odpowiedź, ale jest bardzo sytuacyjna pod względem przydatności.
Mike LP

47

Nie ma „jeśli-inaczej”, tylko jeśli.

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

Opcjonalnie możesz użyć opcji „wybierz kiedy”:

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

Cześć @iwxfer, powyższy link nie jest teraz dostępny, zaktualizuj go, jeśli możesz, jak masz dobry wynik, w przeciwnym razie usuń go.
Ajay2707

25

Uciekłem po prostu używając dwóch tagów if, pomyślałem, że dodam odpowiedź na wypadek, gdyby był użyteczny dla kogokolwiek innego:

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

Chociaż technicznie nie jest to if-elseper se, zachowanie jest takie samo i pozwala uniknąć niezgrabnego podejścia do używania choosetagu, więc w zależności od tego, jak skomplikowane jest twoje wymaganie, może to być lepsze.


1
Rozważmy przypadek, gdy warunek jest czymś skomplikowanym i brzydkim, jak $ {not param.age gt 42 i someOtherVar eq 'foobar'}. Musisz zapisać warunek w tymczasowej zmiennej boolowskiej, abyś mógł zrobić warunek! Lub napisać odwrotność tego warunku. Obie brzydkie. Składnia „w przeciwnym razie” jest gwarantowaną odwrotnością.
mat płonie

3
Rzeczywiście złożony warunek wymagałby albo zmiennej lokalnej, albo zapisu odwrotnego, ale obie z tych opcji nadal działałyby. Wyjaśniłem, że będzie to zależeć od tego, jak skomplikowane jest wymaganie, czy takie podejście byłoby lepsze niż choosetag.
jonk

2
Zgadzam się z tym. Jeśli masz tylko jedną inną, to mniej marży, a następnie używając c: wybierz
javaMoca

1
Jest jeszcze jedna dodatkowa korzyść z posiadania <c: if test = "$ {condition} == true"> i <c: if test = "$ {condition == false}">. Gdy zmienna ma wartość NULL (nie jest inicjowana), żadna gałąź nie jest wykonywana, co jest dobre. Jeśli wybierzesz <c: wybierz> i <c: kiedy>, gałąź fałszywa zostanie wykonana, gdy zmienna ma wartość null.
Steve Stilson

3

musisz użyć tego kodu:

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

i

<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

Jest to dobre i skuteczne podejście w perspektywie złożoności czasowej. Gdy osiągnie prawdziwy warunek, nie będzie już sprawdzać innych. W wielu If, sprawdzi każdy i warunek.

   <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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.