ตรวจสอบขนาดการรวบรวมด้วย JSTL


234

ฉันจะตรวจสอบขนาดของคอลเลกชันด้วย JSTL ได้อย่างไร

สิ่งที่ต้องการ:

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

</c:if>

คำตอบ:


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

</c:if>

ไวยากรณ์นี้ใช้งานได้เฉพาะใน EL 2.2 หรือใหม่กว่า (Servlet 3.0 / JSP 2.2 หรือใหม่กว่า) หากคุณกำลังเผชิญข้อผิดพลาดในการแยกวิเคราะห์ XML เพราะคุณกำลังใช้ JSPX หรือ Facelets แทน JSP แล้วใช้แทนgt>

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

</c:if>

หากคุณพบข้อผิดพลาดในการแยกวิเคราะห์ EL จริง ๆ แล้วคุณอาจใช้รุ่น EL ที่เก่าเกินไป คุณจะต้องใช้fn:length()ฟังก์ชันJSTL จากเอกสาร :

ความยาว (java.lang.Object) - ส่งคืนจำนวนรายการในคอลเลกชันหรือจำนวนอักขระในสตริง

วางสิ่งนี้ไว้ที่ด้านบนของหน้า JSP เพื่ออนุญาตfnเนมสเปซ:

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

หรือถ้าคุณใช้ JSPX หรือ Facelets:

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

และใช้สิ่งนี้ในหน้าของคุณ:

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

ดังนั้นเพื่อทดสอบความยาวของคอลเลกชัน:

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

</c:if>

อีกทางเลือกหนึ่งสำหรับกรณีนี้คุณสามารถใช้emptyโอเปอเรเตอร์EL ได้ง่ายๆ:

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

</c:if>

47
แค่อยากจะทราบว่าถ้าจำเป็นต้องได้รับขนาดคือการตรวจสอบว่าคอลเลกชันไม่ว่างเปล่าแล้วผู้ประกอบการ "ว่าง" มีประโยชน์เพราะมันจะตรวจสอบเป็นโมฆะ
Joel

ฉันเห็นด้วยกับมาร์คที่นี่ ทำไมนำเข้า cruft เพิ่มเติมในหน้าของคุณสำหรับหนึ่งแท็ก ใช้วิธีแก้ปัญหาของมาร์คมันสะอาดกว่า
ResourceReaper

ตกลง - ว่างเปล่าสะอาดกว่า @ Joel ควรโพสต์เป็นคำตอบแบบเต็มเพื่อให้สามารถลงคะแนนและยอมรับ พวกเราหลายคนที่นี่ (ฉัน) เป็นนักเขียนโปรแกรมที่ไม่ใช่ jsp / วางโค้ดตัวอย่างจาก Google และ SO โดยไม่คิดอะไรมากไปกว่าโค้ดชิ้นแรกที่เราเห็น
Josh

9
OP ถามเกี่ยวกับการตรวจสอบขนาดไม่จำเป็นต้องตรวจสอบว่ามันว่างเปล่าคำตอบของฉันยังช่วยให้สถานการณ์ที่ซับซ้อนมากขึ้นได้รับการไตร่ตรองด้วยไลบรารีแท็กเต็มรูปแบบที่มีอยู่
Martlark

บริษัท จะต้องเป็น var ไม่ใช่ param มิฉะนั้นคุณต้องกำหนดเช่นสำหรับ ATG - <dsp: getvalueof var = "บริษัท " param = "arrayParam" />
Andriy Boyko

30

ตามที่แนะนำโดย @Joel และ @Mark Chorley ในความคิดเห็นก่อนหน้า:

${empty companies}

การตรวจสอบรายการ / ชุด / อาร์เรย์ที่เป็นโมฆะและว่างเปล่า มันไม่ได้รับความยาว แต่เป็นไปตามตัวอย่างใน OP gtหากคุณสามารถรับไปกับมันนี้เป็นเพียงสะอาดกว่าการนำเข้าห้องสมุดแท็กและไวยากรณ์ดื้อเหมือน



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.