Bewerten Sie leere oder null JSTL c-Tags


389

Wie kann ich Stringanhand der cTags von überprüfen, ob a null oder leer ist JSTL?

Ich habe eine Namensvariable var1und kann sie anzeigen, möchte aber einen Komparator hinzufügen, um sie zu validieren.

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

Ich möchte überprüfen, ob es null oder leer ist (meine Werte sind Zeichenfolgen).

Antworten:


763

Wie kann ich mithilfe der c-Tags von JSTL überprüfen, ob ein String null oder leer ist?

Sie können das emptySchlüsselwort in a <c:if>dafür verwenden:

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

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

Wenn Sie eine Reihe von Tags nicht bedingt rendern müssen und sie daher nur in einem Tag-Attribut überprüfen können, können Sie den bedingten EL-Operator verwenden ${condition? valueIfTrue : valueIfFalse}:

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

Weitere Informationen zu diesen ${}Dingen (die Ausdruckssprache , die ein von JSTL getrenntes Thema ist ) finden Sie hier .

Siehe auch:


4
Für Leute, die seltsame Probleme mit dem leeren Scheck haben, ist hier eine fischige Geschichte mit einer möglichen Ursache: gayleforce.wordpress.com/2008/01/26/jstl-empty-operator
CodeReaper

9
Zusammenfassend: Funktioniert emptynicht, Setwenn das alte JSTL 1.0 verwendet wird. Sie müssten auf JSTL 1.1 aktualisieren (das bereits aus dem Jahr 2003 stammt).
BalusC

5
@BalusC - Prüft die EL ${not empty var1}gleichzeitig auf leer und null? Ich meine , der Test auf true ausgewertet wird , wenn und nur wenn var1ist nicht null und var1 ist nicht leer. Müssen Sie nicht nullseparat prüfen ?
Löwe

1
ist emptygleich ne ''
shareef

2
@shareef: nein, ist es nicht. Bei StringWerten entspricht dies var ne null and var ne ''. Darüber hinaus unterstützt es auch ObjectArray Collectionund Map.
BalusC

25

Um auch die leere Zeichenfolge zu überprüfen, schlage ich Folgendes vor

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

Es werden auch Nullen behandelt


7

Wenn Sie nur null oder leer markieren, können Sie hierfür die Option mit Standard verwenden: <c:out default="var1 is empty or null." value="${var1}"/>


6

Dieser Code ist korrekt, aber wenn Sie anstelle von null oder einer leeren Zeichenfolge viel Leerzeichen ('') eingegeben haben, geben Sie false zurück.

Um dies zu korrigieren, verwenden Sie den regulären Ausdruck (dieser Code unten überprüft, ob die Variable null oder leer oder leer ist, genau wie 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

Hier ist der eine Liner.

Ternärer Operator in EL

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

3

Sie können verwenden

    ${var == null}

Alternative.


Nein, das kannst du leider nicht. "" ohne Symbole ist eine leere Zeichenfolge, aber nicht null.
GDRT

1

Hier ist ein Beispiel für die Überprüfung eines int und eines Strings, die Sie vom Java Controller an die JSP-Datei übergeben.

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>

Was ist das Problem mit meinem Kommentar?
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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.