427 votes

Évaluer les balises JSTL c vides ou nulles

Comment puis-je valider si un String est nulle ou vide en utilisant l'option c balises de JSTL ?

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

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

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

829voto

BalusC Points 498232

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

Vous pouvez utiliser le empty dans un <c:if> pour ça :

<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, alors 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 ${} les choses (les Langage d'expression qui est un sujet distinct de JSTL ), Vérifiez ici .

Voir aussi :

4 votes

Pour les personnes qui ont des problèmes bizarres avec le chèque vide, voici une histoire louche avec une cause possible : gayleforce.wordpress.com/2008/01/26/jstl-empty-operator

9 votes

Résumée : empty ne fonctionne pas sur Set lorsque vous utilisez l'ancien JSTL 1.0. Vous devez passer à JSTL 1.1 (qui date déjà de 2003).

5 votes

@BalusC - Est-ce que le EL ${not empty var1} vérifier simultanément la présence de vide et de nul ? Je veux dire que le test est évalué comme vrai si et seulement si var1 est pas null et var1 est pas vide. N'est-il pas nécessaire de vérifier null séparément ?

28voto

andro83 Points 189

Pour vérifier également la chaîne vide, je suggère ce qui suit

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

8voto

Ankit Agarwal Points 131

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

6voto

Deepak Mishra Points 1996

Voilà la réplique.

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

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

6voto

Rija Points 99

Ce code est correct mais si vous avez entré beaucoup d'espace (' ') au lieu de null ou de chaîne vide le retour est faux.

Pour corriger cela, utilisez l'expression régulière (le code ci-dessous vérifie si la variable est nulle, vide ou vide, comme 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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X