Kiểm tra kích thước bộ sưu tập với JSTL


234

Làm cách nào tôi có thể kiểm tra kích thước của bộ sưu tập với JSTL?

Cái gì đó như:

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

</c:if>

Câu trả lời:


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

</c:if>

Cú pháp này chỉ hoạt động trong EL 2.2 hoặc mới hơn (Servlet 3.0 / JSP 2.2 trở lên). Nếu bạn đang gặp phải một lỗi phân tích cú pháp XML vì bạn đang sử dụng JSPX hoặc Facelets thay vì JSP, thì hãy sử dụng gtthay vì >.

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

</c:if>

Nếu bạn thực sự phải đối mặt với lỗi phân tích EL, thì có lẽ bạn đang sử dụng phiên bản EL quá cũ. Bạn sẽ cần fn:length()chức năng JSTL sau đó. Từ tài liệu :

length (java.lang.Object) - Trả về số lượng mục trong bộ sưu tập hoặc số lượng ký tự trong chuỗi.

Đặt cái này ở đầu trang JSP để cho phép fnkhông gian tên:

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

Hoặc nếu bạn đang sử dụng JSPX hoặc Facelets:

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

Và sử dụng như thế này trong trang của bạn:

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

Vì vậy, để kiểm tra với độ dài của một bộ sưu tập:

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

</c:if>

Ngoài ra, đối với trường hợp cụ thể này, bạn cũng có thể chỉ cần sử dụng emptytoán tử EL :

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

</c:if>

47
Chỉ muốn lưu ý rằng nếu cần lấy kích thước là để xác định xem bộ sưu tập có trống không thì toán tử "trống" là hữu ích vì nó cũng kiểm tra null.
Joel

Tôi đồng ý với Mark ở đây. Tại sao nhập thêm cruft vào trang của bạn cho một thẻ? Sử dụng giải pháp của Mark, nó sạch hơn.
ResourceReaper

Đồng ý - trống là sạch hơn. @Joel nên đăng dưới dạng câu trả lời đầy đủ để có thể bình chọn và chấp nhận. Rất nhiều người trong số chúng tôi ở đây (tôi) là những lập trình viên không phải là jsp sao chép / dán các đoạn mã từ Google và SO mà không cần suy nghĩ nhiều ngoài đoạn mã đầu tiên chúng ta thấy.
Josh

9
OP đã hỏi về việc kiểm tra kích thước, không nhất thiết là kiểm tra xem nó có trống không, câu trả lời của tôi cũng cho phép các kịch bản phức tạp hơn được dự tính với thư viện thẻ đầy đủ có sẵn.
Martlark

các công ty phải là một var không phải là một param, nếu không bạn phải xác định nó, ví dụ như ATG - <dsp: getvalueof var = "company" param = "ArrayParam" />
Andriy Boyko

30

Theo đề xuất của @Joel và @Mark Chorley trong các bình luận trước đó:

${empty companies}

Điều này kiểm tra danh sách / bộ sưu tập / mảng rỗng và rỗng. Nó không giúp bạn có được chiều dài nhưng nó thỏa mãn ví dụ trong OP. Nếu bạn có thể thoát khỏi nó thì điều này chỉ đơn giản là nhập một thư viện thẻ và cú pháp mạnh mẽ của nó như thế nào gt.



-2

sử dụng ${fn:length(companies) > 0}để kiểm tra kích thước. Điều này trả về một boolean

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.