JSTL ile bir koleksiyon boyutunu kontrol edin


234

JSTL ile bir koleksiyonun boyutunu nasıl kontrol edebilirim?

Gibi bir şey:

<c:if test="${companies.size() > 0}">

</c:if>

Yanıtlar:


430
<c:if test="${companies.size() > 0}">

</c:if>

Bu sözdizimi yalnızca EL 2.2 veya daha yenisinde çalışır (Servlet 3.0 / JSP 2.2 veya daha yenisi). JSP yerine JSPX veya Facelets kullandığınız için XML ayrıştırma hatasıyla karşılaşıyorsanız, gtyerine kullanın >.

<c:if test="${companies.size() gt 0}">

</c:if>

Aslında bir EL ayrıştırma hatasıyla karşılaşıyorsanız, muhtemelen çok eski bir EL sürümü kullanıyorsunuzdur. fn:length()O zaman JSTL fonksiyonuna ihtiyacınız olacak . Gönderen belgeler :

length (java.lang.Object) - Bir koleksiyondaki öğe sayısını veya bir dizedeki karakter sayısını döndürür.

Ad alanına izin vermek için bunu JSP sayfasının en üstüne yerleştirin fn:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

Veya JSPX veya Facelets kullanıyorsanız:

<... xmlns:fn="http://java.sun.com/jsp/jstl/functions">

Sayfanızda şöyle kullanın:

<p>The length of the companies collection is: ${fn:length(companies)}</p>

Bir koleksiyonun uzunluğunu test etmek için:

<c:if test="${fn:length(companies) gt 0}">

</c:if>

Alternatif olarak, bu özel durum için EL emptyoperatörünü de kullanabilirsiniz :

<c:if test="${not empty companies}">

</c:if>

47
Sadece boyutu almak için ihtiyacı boş olmadığını belirlemek için ise "boş" operatörünün de boş olup olmadığını kontrol etmek için yararlı olduğunu belirtmek istedim.
Joel

Burada Mark'a katılıyorum. Neden bir etiket için sayfanıza daha fazla bilgi aktarmalı? Mark'ın çözümünü kullanın, daha temiz.
ResourceReaper

Kabul edildi - boş daha temiz. @Joel, oylanabilmesi ve kabul edilebilmesi için tam bir cevap olarak yayınlamalıdır. Burada birçoğumuz (ben) jsp olmayan programcılar gördüğümüz ilk kod parçasının ötesinde düşünülmeden Google ve SO'dan snippet'leri kopyalıyor / yapıştırıyoruz.
Josh

9
OP, boyutun kontrol edilmesini sordu, mutlaka boş olup olmadığını kontrol etmekle ilgili değil, cevabım ayrıca mevcut tam etiket kütüphanesiyle daha karmaşık senaryoların düşünülmesine izin veriyor.
Martlark

şirketler bir param değil var olmalıdır, aksi takdirde bunu tanımlamanız gerekir, örneğin ATG için - <dsp: getvalueof var = "şirketler" param = "arrayParam" />
Andriy Boyko

30

@Joel ve @Mark Chorley tarafından daha önceki yorumlarda önerildiği gibi:

${empty companies}

Bu, boş ve boş listeleri / koleksiyonları / dizileri kontrol eder. Size uzunluk kazandırmaz ama OP'deki örneği karşılar. Eğer onunla kurtulabilirseniz, bu sadece bir etiket kütüphanesini ve onun huysuz sözdizimini içe aktarmaktan daha temizdir gt.



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.