Cara menggunakan opsi if-else di JSTL

Jawaban:

522

Ya, tapi itu kikuk sekali, misalnya

<c:choose>
  <c:when test="${condition1}">
    ...
  </c:when>
  <c:when test="${condition2}">
    ...
  </c:when>
  <c:otherwise>
    ...
  </c:otherwise>
</c:choose>
skaffman
sumber
5
Selain dari tag pembungkus (pilih), saya tidak melihat bagaimana ini lebih verbose daripada jika / elseif / selain itu. Satu tag pembungkus hampir merupakan 'kikuk sebagai neraka', bukan?
Steven Benitez
19
@ Seven: Ini sifat XMLnya. Ada lebih banyak karakter di boilerplate daripada yang ada di logika sebenarnya.
skaffman
2
Ah, baiklah. Hal yang sama dapat diatur untuk <c:if/>saat itu juga.
Steven Benitez
15
Saya tahu saya agak terlambat ke pesta, tapi <c:otherwise>sepertinya sedikit bertele-tele, eh?
andronikus
6
mulai bersarang logika dengan lekukan yang tepat dan kikuk karena neraka akan tampak deskripsi yang terlalu baik.
Adam Tolley
105

Selain dengan jawaban skaffman, simpel if-else Anda bisa menggunakan operator ternary seperti ini

<c:set value="34" var="num"/>
<c:out value="${num % 2 eq 0 ? 'even': 'odd'}"/>
Laksys
sumber
6
Ini adalah jawaban yang baik, tetapi sangat situasional untuk seberapa berguna jadinya.
Mike LP
47

Tidak ada yang lain, hanya jika.

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

Secara opsional, Anda dapat menggunakan pilih-kapan:

<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>
Menuka Ishan
sumber
Hai @ wwxfer, tautan di atas Anda tidak tersedia saat ini, perbarui, jika Anda bisa mendapatkan skor yang baik, silakan hapus.
Ajay2707
25

Saya lolos dengan hanya menggunakan dua tag if, pikir saya akan menambahkan jawaban seandainya itu digunakan untuk orang lain:

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

sementara secara teknis bukan if-elseper se, perilakunya sama dan menghindari pendekatan yang kikuk dalam menggunakan choosetag, jadi tergantung pada seberapa kompleks kebutuhan Anda, ini mungkin lebih disukai.

jonk
sumber
1
Pertimbangkan kasus ketika kondisinya rumit dan jelek seperti $ {bukan param.age gt 42 dan someOtherVar eq 'foobar'}. Anda harus menyimpan kondisi ke dalam variabel boolean sementara sehingga Anda bisa melakukan! Kondisi, atau menulis kebalikan dari kondisi itu. Keduanya jelek. Sintaks "jika tidak" adalah invers yang dijamin.
Matt membakar
3
Memang kondisi yang kompleks akan membutuhkan variabel lokal atau menulis kebalikannya, tetapi kedua opsi tersebut masih berfungsi. Saya mengklarifikasi bahwa itu akan tergantung pada seberapa kompleks persyaratannya, apakah pendekatan ini lebih disukai daripada choosetag.
jonk
2
Saya setuju dengan ini. Jika Anda hanya memiliki satu lagi, markeupnya lebih sedikit daripada menggunakan c: pilih
javaMoca
1
Ada manfaat tambahan lain dari memiliki <c: if test = "$ {condition} == true"> dan <c: if test = "$ {condition == false}">>. Ketika variabel nol (tidak diinisialisasi), cabang tidak dieksekusi, yang bagus. Jika Anda menggunakan <c: pilih> dan <c: when>, cabang palsu akan dieksekusi ketika variabelnya nol.
Steve Stilson
3

Anda harus menggunakan kode ini:

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

dan

<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>
ankit
sumber
-1

Ini adalah pendekatan yang baik dan efisien sesuai prospek kompleksitas waktu. Setelah itu akan mendapatkan kondisi yang benar, itu tidak akan memeriksa yang lain setelah ini. Dalam beberapa Jika, itu akan memeriksa masing-masing dan kondisi.

   <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>
Sachin Kumar
sumber