JSTL'de if-else seçeneği nasıl kullanılır?


Yanıtlar:


522

Evet, ama cehennem kadar hantal, ör.

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

5
Sarıcı etiketinin yanı sıra (select), bunun / elseif / else'den daha ayrıntılı olduğunu görmüyorum. Bir sargı etiketi, 'cehennem kadar tıknaz' anlamına gelmez, değil mi?
Steven Benitez

19
@Steven: Bunun XML doğası. Isıtıcı plakada gerçek mantıkta olduğundan daha fazla karakter var.
skaffman

2
Ah tamam. Aynı şey <c:if/>o zaman için de ayarlanabilir .
Steven Benitez

15
Partiye biraz geç kaldığımı biliyorum, ama <c:otherwise>biraz ayrıntılı görünüyor ha?
andronikus

6
Uygun girintiyle ve iç içe geçmiş mantığı cehenneme sokmaya başlayın çünkü cehennem çok nazik bir açıklama gibi görünecektir.
Adam Tolley

105

Skaffman cevabına ek olarak, basit if-else böyle üçlü operatör kullanabilirsiniz

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

6
Bu iyi bir cevaptır, ancak ne kadar yararlı olabileceği konusunda oldukça durumsaldır.
Mike LP

47

Sadece if-else yoktur.

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

İsteğe bağlı olarak seçim zamanını kullanabilirsiniz:

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

Merhaba @iwxfer, yukarıdaki bağlantınız şu anda kullanılamıyor, lütfen güncelleyin, eğer iyi bir skor olarak yapabiliyorsanız, diğer akıllıca kaldırın.
Ajay2707

25

Ben sadece iki if etiketleri kullanarak kaçtım, başka birine yararlı olması durumunda bir cevap eklemek düşündüm:

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

teknik olarak if-elsekendiliğinden olmasa da , davranış aynıdır ve chooseetiketi kullanma konusundaki karmaşık yaklaşımdan kaçınır , bu nedenle gereksiniminizin ne kadar karmaşık olduğuna bağlı olarak bu tercih edilebilir.


1
Koşulun $ {not param.age gt 42 ve someOtherVar eq 'foobar'} gibi karmaşık ve çirkin bir şey olduğu durumu düşünün. Koşulunu yapabilmeniz için geçici bir boole değişkeninde saklamanız veya bu koşulun tersini yazmanız gerekir. Her ikisi de çirkin. "Aksi" sözdizimi, garantili bir tersidir.
mat,

3
Aslında karmaşık bir durum ya yerel bir değişken ya da tersini yazmayı gerektirir, ancak bu seçeneklerin her ikisi de hala işe yarayacaktır. Bu yaklaşımın chooseetikete göre tercih edilip edilmeyeceğine dair gerekliliğin ne kadar karmaşık olduğuna bağlı olacağına açıklık getirdim .
jonk

2
Buna katılıyorum. Eğer sadece bir tane daha varsa, onun daha az markeup sonra c: seçin
javaMoca

1
<C: if test = "$ {condition} == true"> ve <c: if test = "$ {condition == false}"> 'a sahip olmanın başka bir yararı daha var. Değişken null olduğunda (başlatılmadı), her iki dal da yürütülmez, bu da iyidir. <C: select> ve <c: when> ile giderseniz, değişken null olduğunda false dal yürütülür.
Steve Stilson

3

bu kodu kullanmanız gerekir:

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

ve

<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

Bu, karmaşıklık beklentisine göre iyi ve verimli bir yaklaşımdır. Gerçek bir durum elde edildikten sonra, bundan sonra başka birini kontrol etmez. Birden fazla If durumunda, her birini ve durumu kontrol edecektir.

   <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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.