Valuta tag JSTL c vuoti o nulli


389

Come posso validare se a Stringè nullo o vuoto usando i ctag di JSTL?

Ho una variabile di nome var1e posso visualizzarla, ma voglio aggiungere un comparatore per convalidarla.

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

Voglio convalidare quando è nullo o vuoto (i miei valori sono stringhe).

Risposte:


763

Come posso verificare se una stringa è nulla o vuota usando i tag c di JSTL?

È possibile utilizzare la emptyparola chiave in a <c:if>per questo:

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

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

Oppure, se non è necessario eseguire il rendering condizionale di un gruppo di tag e quindi è possibile verificarlo solo all'interno di un attributo tag, è possibile utilizzare l'operatore condizionale EL ${condition? valueIfTrue : valueIfFalse}:

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

Per saperne di più su queste ${}cose ( Expression Language , che è un argomento separato da JSTL ), controlla qui .

Guarda anche:


4
Per le persone che hanno strani problemi con l'assegno vuoto, ecco una storia sospetta
CodeReaper

9
Riassunto: emptynon funziona Setquando si utilizza l'antico JSTL 1.0. Dovresti eseguire l'aggiornamento a JSTL 1.1 (che è già dal 2003).
BalusC

5
@BalusC - L'EL ${not empty var1}controlla contemporaneamente sia vuoto che nullo? Voglio dire, il test viene valutato come vero se e solo se nonvar1 è nullo e non è vuoto. Non è necessario verificare separatamente? var1null
Lion,

1
è emptyadatto a ne ''
shareef

2
@shareef: no, non lo è. In caso di Stringvalori, è equivalente a var ne null and var ne ''. Inoltre supporta anche Object, array Collectione Map.
BalusC,

25

per controllare anche la stringa vuota, suggerisco di seguire

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

Gestisce anche i null


7

se si seleziona solo null o vuoto, è possibile utilizzare l'opzione with default per questo: <c:out default="var1 is empty or null." value="${var1}"/>


6

Questo codice è corretto ma se hai inserito molto spazio ('') invece di una stringa nulla o vuota, restituisci falso.

Per correggere questo uso di espressione regolare (questo codice sotto controlla se la variabile è nulla, vuota o vuota uguale a 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

Ecco la fodera.

Operatore ternario all'interno di EL

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

3

Puoi usare

    ${var == null}

alternativamente.


No, sfortunatamente, non puoi. "" senza simboli in essa contenuti è una stringa vuota ma non è nulla.
gdrt

1

Ecco un esempio di come convalidare un int e una stringa che si passa dal controller Java al 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>

Qual è il problema con il mio commento?
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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.