Oceń puste lub zerowe tagi JSTL c

389

Jak mogę sprawdzić, czy Stringwartość a jest pusta lub pusta przy użyciu cznacznikówJSTL ?

Mam zmienną nazwy var1i mogę ją wyświetlić, ale chcę dodać komparator, aby ją zweryfikować.

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

Chcę sprawdzić, czy jest pusta lub pusta (moje wartości są łańcuchami).

użytkownik338381
źródło

Odpowiedzi:

763

Jak mogę sprawdzić, czy ciąg znaków jest pusty lub pusty przy użyciu znaczników c JSTL?

Możesz użyć emptysłowa kluczowego w <c:if>tym celu:

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

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

Lub jeśli nie musisz warunkowo renderować wiązki tagów, a zatem możesz to sprawdzić tylko w atrybucie tagu, możesz użyć operatora warunkowego EL ${condition? valueIfTrue : valueIfFalse}:

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

Aby dowiedzieć się więcej o tych ${}rzeczach ( język wyrażeń , który jest odrębny od JSTL ), sprawdź tutaj .

Zobacz też:

BalusC
źródło
4
Dla osób, które mają dziwne problemy z pustym czekiem, oto podejrzana historia z możliwą przyczyną: gayleforce.wordpress.com/2008/01/26/jstl-empty-operator
CodeReaper
9
Podsumowując: emptynie działa, Setgdy używa się starożytnego JSTL 1.0. Musisz uaktualnić do JSTL 1.1 (który jest już od 2003 roku).
BalusC
5
@BalusC - Czy EL ${not empty var1}sprawdza jednocześnie puste i zerowe? Mam na myśli, że test jest oceniany jako prawdziwy tylko wtedy, gdy nievar1 jest pusty i nie jest pusty. Czy nie ma potrzeby osobnego sprawdzania ? var1null
Lion
1
jest emptyrównoznaczny z ne ''
shareef
2
@shareef: nie, nie jest. W przypadku Stringwartości jest to równoważne z var ne null and var ne ''. Ponadto obsługuje również Object, tablicę Collectioni Map.
BalusC
25

aby również sprawdzić pusty ciąg, sugeruję następujące

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

Obsługuje również wartości zerowe

andro83
źródło
7

jeśli zaznaczysz tylko pustą lub pustą, możesz użyć domyślnej opcji: <c:out default="var1 is empty or null." value="${var1}"/>

Ankit Agarwal
źródło
6

Ten kod jest poprawny, ale jeśli wprowadziłeś dużo spacji ('') zamiast pustego lub pustego łańcucha, zwróć false.

Aby to skorygować, użyj wyrażenia regularnego (poniższy kod sprawdź, czy zmienna jest pusta, pusta lub pusta tak samo jak 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>
Rija Ramampiandra
źródło
6

Oto jeden liniowiec.

Trójskładnikowy operator wewnątrz EL

${empty value?'value is empty or null':'value is NOT empty or null'}
Sorter
źródło
3

Możesz użyć

    ${var == null}

alternatywnie.

Supun Dharmarathne
źródło
Nie, niestety nie możesz. „” bez żadnych symboli jest pustym ciągiem, ale nie ma wartości null.
gdrt
1

Oto przykład sprawdzania poprawności wartości int i ciągu przekazywanych z kontrolera Java do pliku 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>
Gen
źródło
Jaki jest problem z moim komentarzem?
Gen
-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>
ASR
źródło