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.