Як використовувати опцію if-else в JSTL


Відповіді:


521

Так, але це незграбно, як пекло, наприклад

<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

Немає іншого, просто якщо.

<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

Я пішов із простого використання двох тегів, я подумав би додати відповідь у випадку, якщо це буде корисним для когось іншого:

<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тегом.
jonk

2
Я згоден з цим. Якщо у вас є лише один інший, його менше маркетинг, а потім використання c:
select

1
Ще одна додаткова перевага - <c: if test = "$ {condition} == true"> та <c: if test = "$ {condition == false" ">. Коли змінна є null (не ініціалізована), жодна гілка не виконується, що добре. Якщо ви перейдете з <c: select> і <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.