2011-03-27 5 views
11

Aşağıdaki gibi bir şey yapmak istiyorum:Java JSP için JSTL'de nasıl "nested if" yaparsam?

<c:choose> 
    <c:when test="${empty example1}"> 
    </c:when> 
    <c:otherwise> 
     <c:when test="${empty example2}"> 
     </c:when> 
     <c:otherwise> 
     </c:otherwise>    
    </c:otherwise> 
</c:choose> 

Bu mümkün mü? Koşmaya çalışırken atılan bir istisna alıyorum.

Teşekkürler.

cevap

16

Daha böyle yapmak gerekir: Burada gösterilen

<c:choose> 
    <c:when test="${empty example1}"> 
     <!-- do stuff --> 
    </c:when> 
    <c:otherwise> 
     <c:choose> 
      <c:when test="${empty example2}"> 
       <!-- do different stuff --> 
      </c:when> 
      <c:otherwise> 
       <!-- do default stuff --> 
      </c:otherwise> 
     </c:choose> 
    </c:otherwise> 
</c:choose> 

ayrıntı XML çok düzeyli koşullu ifadeler uygulanması için kötü bir dildir neden iyi bir örnektir.

+0

Belki de, ancak bu ayrıntı düzeyi gerekli değildir. @BalusC, aşağıda daha zarif ve okunabilir bir çözüme sahiptir. Aynı şey anlamına gelir, çünkü c: ne zaman 'c: tarafından takip edilirse, aksi takdirde' if-else 'ile aynıdır. – hotshot309

+0

Yeterince adil, ama alternatif örnek bile tıkamak ve verbose. "C: select", insan okunabilirliği açısından herhangi bir değeri ne olursa olsun, ne de "test =" gibi mantıksal koşulları belirtmek zorunda kalmaz. Örneğim basitleştirilebilir, ancak XML hala/elseif/else mantığını temsil etmek için çok zayıf bir dildir. – aroth

9

<c:choose> numaralı telefondan birden çok <c:when> s kullanabilirsiniz.

<c:choose> 
    <c:when test="${empty example1}"> 
    </c:when> 
    <c:when test="${empty example2}"> 
    </c:when> 
    <c:otherwise> 
    </c:otherwise>    
</c:choose> 
+1

Saygılarımla, bu her zaman mümkün olduğunu kabul ediyorum. Kullanıcıların belirli bir izinleri olmadığında bir formda görüntülediğim senaryo görüntülenir. Daha sonra , bu izinlere sahiplerse bir dizi radyo düğmesi gösterir. İçeride iç içe başka bir kullanıcı alt kümesi için sunulan başka bir koşullu radyo düğmesi. İyi bir tartışma için teşekkürler! – noogrub

+0

Kaçmak için nefret et, ama lütfen şuna bir bakabilir misin? http://stackoverflow.com/questions/22622126/if-else-or-when-condition-in-jstl. Çok teşekkür ederim ve tekrar özür dilerim OP! Birilerinin dikkatini çekmek zorunda kaldı :) – CodingInCircles

0

@ BalusC ile aynı fikirdeyim - ifadeyi basitleştirebilirsiniz. c:when ifadelerinin, if-else if blokları gibi birbirinden bağımsız olduğunu unutmayın. c:choose en az bir c:when ifadesinin ebeveyn olmalı ve bu c:when hep aynı dolaysız ana sahip en az bir c:otherwise deyimi önce gelmesi

JSTL 1.2 spec devletler. Aslında, bu da her c:when'un c:choose'un içinde bir c:otherwise olması ve c:choose'un c:when + c:otherwise'u çevrelemesi gerektiği anlamına gelir. Görebildiğim kadarıyla, spesifikasyon c:choose öğelerinin iç içe geçmesini ifade etmiyor, bu yüzden işe yarayıp yaramadığını bilmiyorum - ama onları yuvalamaya zorlanmayacağınızı düşünmüyorum.