Évaluer les balises JSTL c vides ou nulles


389

Comment puis-je valider si a Stringest nul ou vide en utilisant lec balises de JSTL?

J'ai une variable de nom var1et je peux l'afficher, mais je veux ajouter un comparateur pour la valider.

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

Je veux valider quand il est nul ou vide (mes valeurs sont des chaînes).

Réponses:


763

Comment puis-je valider si une chaîne est nulle ou vide en utilisant les balises c de JSTL?

Vous pouvez utiliser le emptymot - clé dans un <c:if>pour cela:

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

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

Ou si vous n'avez pas besoin de rendre conditionnellement un tas de balises et que vous ne pouvez donc le vérifier qu'à l'intérieur d'un attribut de balise, vous pouvez utiliser l'opérateur conditionnel EL ${condition? valueIfTrue : valueIfFalse}:

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

Pour en savoir plus sur ces ${}choses (le langage d'expression , qui est un sujet distinct de JSTL ), vérifiez ici .

Voir également:


4
Pour les personnes qui ont des problèmes étranges avec le chèque vide, voici une histoire louche
CodeReaper

9
Résumé: emptyne fonctionne pas Setlors de l'utilisation de l'ancien JSTL 1.0. Vous devez effectuer une mise à niveau vers JSTL 1.1 (qui date déjà de 2003).
BalusC

5
@BalusC - L'EL ${not empty var1}vérifie- t-il à la fois vide et null simultanément? Je veux dire que le test est évalué à vrai si et seulement si var1n'est pas nul et var1 n'est pas vide. N'est-il pas nécessaire de vérifier nullséparément?
Lion

1
est emptyéquivalent à ne ''
shareef

2
@shareef: non, ce n'est pas le cas. En cas de Stringvaleurs, c'est équivalent à var ne null and var ne ''. De plus, il prend également en charge Object, array Collectionet Map.
BalusC

25

pour vérifier également la chaîne vide, je suggère de suivre

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

Il gère également les valeurs nulles


7

si vous ne cochez que null ou vide, vous pouvez utiliser l'option with default pour cela: <c:out default="var1 is empty or null." value="${var1}"/>


6

Ce code est correct mais si vous avez entré beaucoup d'espace ('') au lieu de chaîne nulle ou vide, retournez false.

Pour corriger cela, utilisez une expression régulière (ce code ci-dessous vérifie si la variable est nulle ou vide ou vide la même chose que 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

Voici la doublure.

Opérateur ternaire à l'intérieur d'EL

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

3

Vous pouvez utiliser

    ${var == null}

alternativement.


Non, malheureusement, vous ne pouvez pas. "" sans aucun symbole est une chaîne vide mais n'est pas nulle.
gdrt

1

Voici un exemple de validation d'un int et d'une chaîne que vous transmettez du contrôleur Java au fichier 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>

Quel est le problème avec mon commentaire?
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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.