JSTL에서 if-else 옵션을 사용하는 방법


답변:


521

예, 그러나 그것은 지옥처럼 어리 석습니다.

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

5
래퍼 태그 (선택) 외에, 이것이 if / elseif / else보다 더 장황하다는 것을 알지 못합니다. 하나의 래퍼 태그는 '지저분한 느낌'을 거의 구성하지 않습니다.
Steven Benitez

19
@Steven : XML의 본질입니다. 상용구보다 보일러 플레이트에 더 많은 문자가 있습니다.
skaffman

2
그래. 그때도 마찬가지 <c:if/>입니다.
Steven Benitez

15
파티에 좀 늦었지만 <c:otherwise>조금 장황한 것 같아요?
andronikus

6
지옥은 너무 친절한 설명처럼 보일 수 있으므로 적절한 들여 쓰기와 어수선한 중첩 논리를 시작하십시오.
Adam Tolley

105

skaffman 응답 외에도 간단한 if-else 이외의 삼항 연산자를 사용할 수 있습니다

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

6
이것은 좋은 대답이지만 그것이 얼마나 유용한 지에 대한 상황은 매우 높습니다.
Mike 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'}와 같이 복잡하고 추악한 경우를 고려하십시오. ! condition을 수행하거나 해당 조건의 역을 쓰려면 조건을 임시 부울 변수에 저장해야합니다. 둘 다 못 생겼어 "그렇지 않은"구문은 보장 된 역이다.
매트 화상

3
실제로 복잡한 조건에는 로컬 변수가 필요하거나 역을 쓰지만 두 옵션 모두 여전히 작동합니다. 이 접근 방식이 choose태그 보다 선호되는지 여부에 대한 요구 사항이 얼마나 복잡한 지에 따라 달라집니다 .
jonk 2016 년

2
동의합니다. 당신이 다른 것을 가지고 있다면, 그것의 덜 마크 업 한 다음 c : choose를 사용하십시오
javaMoca

1
<c : if test = "$ {condition} == true"> 및 <c : if test = "$ {condition == false}">를 사용하면 또 다른 이점이 있습니다. 변수가 null (초기화되지 않은)이면 어느 분기도 실행되지 않습니다. <c : choose> 및 <c : when>과 함께 사용하면 변수가 null 일 때 잘못된 분기가 실행됩니다.
Steve Stilson 22:41에

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

이것은 시간당 복잡성 전망에 따라 좋고 효율적인 접근법입니다. 일단 진정한 조건을 얻으면, 이후에는 다른 것을 점검하지 않을 것입니다. 다중 If에서는 각각과 조건을 확인합니다.

   <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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.