Mengevaluasi tag JSTL kosong atau null


389

Bagaimana saya bisa memvalidasi jika a Stringnol atau kosong menggunakan ctag JSTL?

Saya memiliki variabel nama var1dan saya bisa menampilkannya, tetapi saya ingin menambahkan komparator untuk memvalidasinya.

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

Saya ingin memvalidasi ketika nol atau kosong (nilai saya adalah string).

Jawaban:


763

Bagaimana saya bisa memvalidasi jika sebuah String adalah nol atau kosong menggunakan tag c dari JSTL?

Anda dapat menggunakan emptykata kunci dalam <c:if>untuk ini:

<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>

Atau <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>

Atau jika Anda tidak perlu membuat sekelompok tag secara kondisional dan karenanya Anda hanya bisa memeriksanya di dalam atribut tag, maka Anda dapat menggunakan operator kondisional EL ${condition? valueIfTrue : valueIfFalse}:

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

Untuk mempelajari lebih lanjut tentang ${}hal - hal itu ( Bahasa Ekspresi , yang merupakan subjek terpisah dari JSTL ), periksa di sini .

Lihat juga:


4
Untuk orang-orang yang memiliki masalah aneh dengan cek kosong, berikut adalah kisah mencurigakan dengan kemungkinan penyebab: gayleforce.wordpress.com/2008/01/26/jstl-empty-operator
— CodeReaper

9
Ringkas: emptytidak berfungsi Setsaat menggunakan JSTL 1.0 kuno. Anda harus meningkatkan ke JSTL 1.1 (yang sudah dari tahun 2003).
— BalusC

5
@ BalusC - Apakah EL ${not empty var1}memeriksa keduanya kosong dan nol secara bersamaan? Maksudku tes dievaluasi untuk benar jika dan hanya jika var1adalah tidak nol dan var1 yang tidak kosong. Apakah tidak perlu memeriksa secara nullterpisah?
— Singa

1
adalah emptyequvilant to ne ''
— shareef

2
@shareef: tidak, tidak. Dalam hal Stringnilai, ini setara dengan var ne null and var ne ''. Lebih lanjut itu juga mendukung Object, array, Collectiondan Map.
— BalusC

25

untuk juga memeriksa string kosong, saya sarankan berikut

<%@ 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>

Ini juga menangani nulls


7

jika Anda hanya memeriksa nol atau kosong maka Anda dapat menggunakan opsi with default untuk ini: <c:out default="var1 is empty or null." value="${var1}"/>


6

Kode ini benar tetapi jika Anda memasukkan banyak spasi ('') alih-alih string kosong atau kosong, false.

Untuk memperbaiki ini gunakan ekspresi reguler (kode ini di bawah ini memeriksa apakah variabelnya nol atau kosong atau kosong sama dengan 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>

6

Inilah liner satu.

Operator ternary di dalam EL

${empty value?'value is empty or null':'value is NOT empty or null'}

3

Kamu bisa menggunakan

    ${var == null}

kalau tidak.


Tidak, sayangnya, Anda tidak bisa. "" tanpa simbol di dalamnya adalah string kosong tetapi bukan null.
— gdrt

1

Berikut adalah contoh cara memvalidasi int dan String yang Anda berikan dari Java Controller ke file 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>

Apa masalah dengan komentar saya?
— Gene

-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>
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.