ประเมินแท็ก JSTL c ว่างหรือ null


389

ฉันจะตรวจสอบได้อย่างไรถ้าStringเป็นโมฆะหรือว่างเปล่าโดยใช้cแท็กของJSTL?

ฉันมีชื่อตัวแปรvar1และฉันสามารถแสดงได้ แต่ฉันต้องการเพิ่มเครื่องมือเปรียบเทียบเพื่อตรวจสอบความถูกต้อง

<c:out value="${var1}" />

ฉันต้องการตรวจสอบเมื่อเป็นโมฆะหรือว่างเปล่า (ค่าของฉันคือสตริง)

คำตอบ:


763

ฉันจะตรวจสอบว่าสตริงเป็นโมฆะหรือว่างเปล่าโดยใช้แท็ก c ของ JSTL ได้อย่างไร

คุณสามารถใช้emptyคำสำคัญใน<c:if>สำหรับ:

<c:if test="${empty var1}">
    var1 is empty or null.
</c:if>
<c:if test="${not empty var1}">
    var1 is NOT empty or null.
</c:if>

หรือ<c:choose>:

<c:choose>
    <c:when test="${empty var1}">
        var1 is empty or null.
    </c:when>
    <c:otherwise>
        var1 is NOT empty or null.
    </c:otherwise>
</c:choose>

หรือหากคุณไม่จำเป็นต้องแสดงแท็กจำนวนมากแบบมีเงื่อนไขและทำให้คุณสามารถตรวจสอบได้เฉพาะในแอ็ตทริบิวต์แท็กคุณสามารถใช้ตัวดำเนินการตามเงื่อนไข EL ${condition? valueIfTrue : valueIfFalse}:

<c:out value="${empty var1 ? 'var1 is empty or null' : 'var1 is NOT empty or null'}" />

ต้องการเรียนรู้เพิ่มเติมเกี่ยวกับบรรดา${}สิ่ง (คนการแสดงออกภาษาซึ่งเป็นเรื่องที่แยกจากJSTL ) ตรวจสอบที่นี่

ดูสิ่งนี้ด้วย:


4
สำหรับผู้ที่มีปัญหาแปลก ๆ กับการตรวจสอบที่ว่างเปล่าต่อไปนี้เป็นเรื่องคาวที่มีสาเหตุที่เป็นไปได้: gayleforce.wordpress.com/2008/01/26/jstl-empty-operator
CodeReaper

9
สรุป: emptyไม่ทำงานSetเมื่อใช้ JSTL 1.0 โบราณ คุณต้องอัปเกรดเป็น JSTL 1.1 (ซึ่งมาจาก 2003 แล้ว)
BalusC

5
@BalusC - EL ${not empty var1}ตรวจสอบทั้งว่างและ null พร้อมกันหรือไม่ ผมหมายถึงการทดสอบได้รับการประเมินให้เป็นจริงและถ้าหากvar1เป็นไม่ null และ var1เป็นไม่ว่างเปล่า ไม่จำเป็นต้องตรวจสอบnullแยกต่างหากหรือไม่?
Lion

1
เป็นemptyequvilant ไปภาคตะวันออกเฉียงเหนือ ''
ชารีฟ

2
@shareef: ไม่มันไม่ใช่ ในกรณีที่มีค่าก็เทียบเท่ากับString var ne null and var ne ''นอกจากนี้ยังสนับสนุนObjectอาร์เรย์และCollection Map
BalusC

25

เพื่อตรวจสอบสตริงว่างฉันขอแนะนำดังต่อไปนี้

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

<c:if test="${empty fn:trim(var1)}">

</c:if>

นอกจากนี้ยังจัดการ nulls


7

หากคุณตรวจสอบเพียง null หรือว่างเปล่าจากนั้นคุณสามารถใช้กับตัวเลือกเริ่มต้นสำหรับสิ่งนี้: <c:out default="var1 is empty or null." value="${var1}"/>


6

รหัสนี้ถูกต้อง แต่ถ้าคุณป้อนพื้นที่จำนวนมาก ('') แทนค่า null หรือสตริงว่างกลับเท็จ

หากต้องการแก้ไขให้ใช้การแสดงผลปกติ (รหัสด้านล่างนี้ตรวจสอบว่าตัวแปรเป็นโมฆะหรือว่างเปล่าหรือว่างเปล่าเหมือนกับ org.apache.commons.lang.StringUtils.isNotBlank):

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
        <c:if test="${not empty description}">
            <c:set var="description" value="${fn:replace(description, ' ', '')}" />
            <c:if test="${not empty description}">
                  The description is not blank.
            </c:if>
        </c:if>


3

คุณสามารถใช้ได้

    ${var == null}

อีกทางเลือกหนึ่ง


ไม่น่าเสียดายที่คุณทำไม่ได้ "" ไม่มีสัญลักษณ์ใด ๆ ในนั้นเป็นสตริงว่าง แต่ไม่เป็นค่าว่าง
gdrt

1

นี่คือตัวอย่างของวิธีการตรวจสอบความถูกต้องของ int และสตริงที่คุณส่งผ่านจากตัวควบคุม Java ไปยังไฟล์ JSP

MainController.java:

@RequestMapping(value="/ImportJavaToJSP")
public ModelAndView getImportJavaToJSP() {
    ModelAndView model2= new ModelAndView("importJavaToJSPExamples");

    int someNumberValue=6;
    String someStringValue="abcdefg";
    //model2.addObject("someNumber", someNumberValue);
    model2.addObject("someString", someStringValue);

    return model2;
}

importJavaToJSPExamples.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<p>${someNumber}</p>
<c:if test="${not empty someNumber}">
    <p>someNumber is Not Empty</p>
</c:if>
<c:if test="${empty someNumber}">
    <p>someNumber is Empty</p>
</c:if>
<p>${someString}</p>
<c:if test="${not empty someString}">
    <p>someString is Not Empty</p>
</c:if>
<c:if test="${empty someString}">
    <p>someString is Empty</p>
</c:if>

ปัญหาของฉันคืออะไร
ยีน

-1
In this step I have Set the variable first:

<c:set var="structureId" value="<%=article.getStructureId()%>" scope="request"></c:set>

In this step I have checked the variable empty or not:

 <c:if test="${not empty structureId }">
    <a href="javascript:void(0);">Change Design</a>
 </c:if>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.