Periksa ukuran koleksi dengan JSTL


234

Bagaimana saya bisa memeriksa ukuran koleksi dengan JSTL?

Sesuatu seperti:

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

</c:if>

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>

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.



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.