Boş veya boş JSTL c etiketlerini değerlendirin


389

Etiketlerini Stringkullanarak a'nın boş veya boş olup olmadığını nasıl doğrulayabilirim ?cJSTL

Bir ad değişkenim var var1ve bunu görüntüleyebilirim, ancak doğrulamak için bir karşılaştırıcı eklemek istiyorum.

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

Boş veya değer (değerlerim dizeler olduğunda) doğrulamak istiyorum.

Yanıtlar:


763

Bir dizenin JSTL'nin c etiketlerini kullanarak boş veya boş olup olmadığını nasıl doğrulayabilirim?

Bunun için a emptyanahtar sözcüğünü kullanabilirsiniz <c:if>:

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

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

Veya bir grup etiketi koşullu olarak oluşturmanız gerekmiyorsa ve böylece etiketi yalnızca bir etiket özniteliği içinde kontrol edebiliyorsanız, EL koşullu işlecini kullanabilirsiniz ${condition? valueIfTrue : valueIfFalse}:

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

Bunlar hakkında daha fazla bilgi edinmek için ${}( JSTL'den ayrı bir konu olan İfade Dili ) buraya bakın .

Ayrıca bakınız:


4
Boş çekle ilgili garip sorunları olan insanlar için, olası bir nedeni olan balık hikayesi: gayleforce.wordpress.com/2008/01/26/jstl-empty-operator
CodeReaper

9
Özetle: Eski JSTL 1.0 kullanılırken emptyçalışmaz Set. JSTL 1.1'e yükseltmeniz gerekir (zaten 2003'ten beri).
BalusC

5
@BalusC - EL ${not empty var1}aynı anda hem boş hem de boş olup olmadığını kontrol ediyor mu? Ben ancak ve ancak testi true değerlendirilir demek var1olduğunu değil boş ve var1 edilir değil boşaltın. nullAyrı olarak kontrol etmeye gerek yok mu?
Aslan

1
olduğu emptyequvilant için ne ''
shareef

2
@shareef: hayır, değil. StringDeğerler söz konusu olduğunda , buna eşdeğerdir var ne null and var ne ''. Ayrıca Object, dizi Collectionve destekler Map.
BalusC

25

Ayrıca boş dize kontrol etmek için, aşağıdaki öneririz

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

Ayrıca null değerlerini de işler


7

yalnızca boş veya boş seçeneğini işaretlerseniz, bunun için varsayılan seçeneği kullanabilirsiniz: <c:out default="var1 is empty or null." value="${var1}"/>


6

Bu kod doğrudur ancak null veya boş dize yerine çok fazla alan ('') girdiyseniz false döndürür.

Bunu düzeltmek için düzenli ifadeyi kullanın (aşağıdaki bu kod, değişkenin boş veya boş veya boş olup olmadığını org.apache.commons.lang.StringUtils.isNotBlank ile aynı olup olmadığını kontrol edin):

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

İşte tek astar.

EL içinde üçlü operatör

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

3

Kullanabilirsiniz

    ${var == null}

Alternatif olarak.


Hayır, ne yazık ki yapamazsınız. İçinde herhangi bir sembol olmadan "" boş bir dizedir ancak boş değil.
gdrt

1

Java Denetleyicisinden JSP dosyasına geçirdiğiniz int ve String öğelerini nasıl doğrulayacağınıza ilişkin bir örnek aşağıda verilmiştir.

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>

Yorumumla ilgili sorun nedir?
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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.