Periksa ukuran koleksi dengan JSTL

234

Bagaimana saya bisa memeriksa ukuran koleksi dengan JSTL?

Sesuatu seperti:

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

</c:if>
Sergio del Amo
sumber

Jawaban:

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

</c:if>

Sintaks ini hanya berfungsi di EL 2.2 atau lebih baru (Servlet 3.0 / JSP 2.2 atau lebih baru). Jika Anda menghadapi kesalahan parsing XML karena Anda menggunakan JSPX atau Facelets alih-alih JSP, maka gunakan gtsebaliknya >.

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

</c:if>

Jika Anda benar-benar menghadapi kesalahan penguraian EL, maka Anda mungkin menggunakan versi EL yang terlalu lama. Anda akan membutuhkan fn:length()fungsi JSTL . Dari dokumentasi :

length (java.lang.Object) - Mengembalikan jumlah item dalam koleksi, atau jumlah karakter dalam sebuah string.

Letakkan ini di bagian atas halaman JSP untuk memungkinkan fnnamespace:

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

Atau jika Anda menggunakan JSPX atau Facelets:

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

Dan gunakan seperti ini di halaman Anda:

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

Jadi untuk menguji dengan koleksi panjang:

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

</c:if>

Atau, untuk kasus khusus ini Anda juga dapat menggunakan emptyoperator EL :

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

</c:if>
Martlark
sumber
47
Hanya ingin mencatat bahwa jika kebutuhan untuk mendapatkan ukuran adalah untuk menentukan apakah koleksi tidak kosong maka operator "kosong" berguna karena ia juga memeriksa nol.
Joel
Saya setuju dengan Markus di sini. Mengapa mengimpor lebih banyak cruft ke halaman Anda untuk satu tag? Gunakan solusi Mark, ini lebih bersih.
ResourceReaper
Setuju - kosong lebih bersih. @ Joel harus memposting sebagai jawaban lengkap sehingga dapat dipilih dan diterima. Banyak dari kita di sini (saya) adalah programmer non-jsp menyalin / menempelkan potongan dari Google dan SO tanpa banyak berpikir di luar bagian pertama dari kode yang kita lihat.
Josh
9
OP bertanya tentang memeriksa ukuran, tidak harus tentang memeriksa apakah itu kosong, jawaban saya juga memungkinkan skenario yang lebih rumit untuk direnungkan dengan pustaka tag lengkap yang tersedia.
Martlark
perusahaan harus menjadi var bukan param, jika tidak Anda harus mendefinisikannya, misalnya untuk ATG - <dsp: getvalueof var = "perusahaan" param = "arrayParam" />
Andriy Boyko
30

Seperti yang disarankan oleh @ Joel dan @ Mark Chorley di komentar sebelumnya:

${empty companies}

Ini memeriksa daftar / koleksi / array nol dan kosong. Itu tidak membuat Anda panjang tetapi memenuhi contoh di OP. Jika Anda bisa lolos, ini lebih bersih daripada mengimpor tag library dan seperti sintaksisnya gt.

Josh
sumber
12

Anda bisa menggunakan seperti ini

${fn:length(numList)}
Brad Larson
sumber
-2

gunakan ${fn:length(companies) > 0}untuk memeriksa ukuran. Ini mengembalikan boolean

Supun Dharmarathne
sumber