Как использовать опцию if-else в JSTL


Ответы:


522

Да, но это чертовски неуклюже, например

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

5
Кроме тега-обертки (выберите), я не вижу, насколько это более многословно, чем если бы / elseif / else было бы. Одна метка-обертка вряд ли представляет собой «неуклюжий как ад», не так ли?
Стивен Бенитес

19
@Steven: Это XML природа этого. В шаблоне больше символов, чем в реальной логике.
Скаффман

2
Ах хорошо. То же самое можно было бы установить и <c:if/>тогда.
Стивен Бенитес

15
Я знаю, что немного опоздал на вечеринку, но, <c:otherwise>кажется, немного многословен, а?
andronikus

6
начните раскручивать логику с соответствующих отступов и неуклюжих, поскольку ад покажется слишком любезным описанием.
Адам Толи

105

В дополнение к ответу Скаффмана, просто если-иначе вы можете использовать троичный оператор, как это

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

6
Это хороший ответ, но он очень ситуативный, насколько он будет полезен.
Майк LP

47

Здесь нет if-else, просто если.

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

При желании вы можете использовать выбор когда:

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

Здравствуйте, @iwxfer, ваша ссылка выше недоступна сейчас, пожалуйста, обновите, если вы можете, как вам хорошо, другой мудрый удалить его.
Ajay2707

25

Мне просто удалось использовать два тега if, и я решил добавить ответ, если он кому-нибудь пригодится:

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

хотя технически это не if-elseсамо по себе, поведение такое же и избегает неуклюжего подхода использования chooseтега, поэтому в зависимости от сложности ваших требований это может быть предпочтительнее.


1
Рассмотрим случай, когда условие является чем-то сложным и безобразным, например, $ {not param.age gt 42 и someOtherVar eq 'foobar'}. Вам нужно будет сохранить условие во временную логическую переменную, чтобы вы могли выполнить условие! Или записать обратное условие. Оба безобразны. Синтаксис «иначе» является гарантированным обратным.
Мэтт горит

3
Действительно, для сложного условия потребуется либо локальная переменная, либо запись обратного, но оба эти параметра будут работать. Я пояснил, что это будет зависеть от того, насколько сложным является требование относительно того, будет ли этот подход предпочтительнее chooseтега.
Йонк

2
Я согласен с этим. Если у вас есть только один, его наценка меньше, чем при использовании c: выбрать
javaMoca

1
Есть еще одно дополнительное преимущество: наличие <c: if test = "$ {условие} == true"> и <c: if test = "$ {условие == false}">. Когда переменная равна нулю (не инициализирована), ни одна ветвь не выполняется, что хорошо. Если вы выберете <c: choose> и <c: when>, ложная ветвь будет выполнена, когда переменная равна нулю.
Стив Стилсон

3

Вы должны использовать этот код:

с участием <%@ taglib prefix="c" uri="http://www.springframework.org/tags/form"%>

и

<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

Это хороший и эффективный подход с точки зрения временной сложности. Как только он получит истинное состояние, он не будет проверять другие после этого. В нескольких случаях, он будет проверять каждое условие.

   <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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.